spring 4.1发出异步post请求报406及解决方法

2018-07-03  本文已影响0人  迈小步

请求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;
}
上一篇下一篇

猜你喜欢

热点阅读