美文网首页
spring 4.1发出异步post请求报406及解决方法

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

作者: 迈小步 | 来源:发表于2018-07-03 13:33 被阅读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;
    }

    相关文章

      网友评论

          本文标题:spring 4.1发出异步post请求报406及解决方法

          本文链接:https://www.haomeiwen.com/subject/ymbduftx.html