spring 4.1发出异步post请求报406及解决方法
请求URL:xiangmu/queryList.html,报406。
网上写的加jar包或者在pom.xml中加2.4版本以上的fasterxml.jackson都不行。不合适当前的情况,一般我都用.do,.action请求,由于项目稍微复杂一些,所有加.html的请求,问题就出在请求结尾上.html 。
// 看一下案例
// js代码(删除中间对于演示无用代码)
(function() { dataList(); }); function dataList(page) { if (typeof (page) == 'undefined' || page == 0) { page = 1; }('#datagrid').html("");
$.post(baseurl + "xiangmu/queryList.html", {
page : page,
rows : 10
}, function(req, status) {
var list = req.list;
}, "json");
}
// Java代码(删除中间对于演示无用代码)
@RequestMapping(value = { "/queryList.action", "queryList.html" })
@ResponseBody
public PageInfoJson<Xiangmu> queryListByHome(Integer page, Integer rows, Xiangmu record, HttpServletRequest request) {
return null;
}
// 原因.html结尾的请求没有对应格式的返回数据
// 解决办法:加上支持html对应格式的返回数据
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
// 看图
QQ截图20180703133653.png
// 上面的解决办法也不完全行,影响到其它接口功能,连登录接口都不行,这样做的结果导致变成非json格式,有转义字符,影响到全局的办法肯定不行。
// 以上是错误的
// 新的解决办法, 以.html为后缀名访问,默认返回数据类型是 text/html, 所以要修改返回的数据类型
// spring配置文件中加以下代码
<mvc:annotation-driven
content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="mediaTypes">
<map>
<entry key="html" value="application/json;charset=UTF-8" />
</map>
</property>
</bean>
// 请求接口也注意修改,produces的属性值必须是"application/json;charset=UTF-8"
@RequestMapping(value = "queryList.html", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
@ResponseBody
public PageInfoJson<Xiangmu> queryListByHome2(Integer page, Integer rows, Xiangmu record, HttpServletRequest request) {
Map map = new HashMap();
List<Xiangmu> list = null;
try {
list = recordService.listPage(page == null ? 1 : page, rows == null ? 10 : rows, record);
map = ToolsUtils.returnResult(Constant.DataStatus.SUCCESS_CODE, "", Constant.DataStatus.SUCCESS_MSG);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
map = ToolsUtils.returnResult(Constant.DataStatus.FAIL_CODE, "", Constant.DataStatus.FAIL_MSG);
}
PageInfoJson<Xiangmu> pageInfo = new PageInfoJson(list);
return pageInfo;
}