解决 ajax报错406,springMVC报错406,页面报错406解决办法

解决SpringMVC 406错误
本文介绍了解决SpringMVC项目中出现的406错误的方法,特别是当使用.ajax请求带有.html后缀的URL时。文章分析了错误产生的原因,并提供了具体的解决方案。

**

解决 ajax报错406,springMVC报错406,页面报错406解决办法

**

一、问题描述
1、使用 ajax请求一个带 .html 后缀的url,报错406,直接在页面访问也是报错406。
2、可以进到对应Controller方法,方法正常执行,方法执行完毕后,无对应数据返回

相关错误截图如下:

这里写图片描述

这里写图片描述

二、相关代码
1、 ajax 请求的代码

$("#btn_ajax").click(function(){
            $.ajax({   
                url:"${pageContext.request.contextPath}/rankController/provinceJson_2.html",
                type:"post",
                data:{"name":"ajax 请求测试"},
                dataType:"json",
                success:function(data){
                    alert("请求成功: data-->"+JSON.stringify(data));
                },
            });
        });

2、后台 controller 接收代码

   @RequestMapping(value="/provinceJson_{type}.html")
   @ResponseBody
    public List<Area>  provinceJsonHtml(@PathVariable String type,Model model){
        List<Area> provinceList = areaService.getAreaListByType(type);
        model.addAttribute("provinceList", provinceList);
        return provinceList;
    }

三、简单的代码分析
从ajax 请求url和后台接收url,可以有以下3点理解:
a. url中需要一个绑定参数
b. 该方法的返回值为 json ( @ResponseBody )
c. 该url 并不是请求一个真正的 html页面,而是一个伪装的 html

四、问题解决
1、 简单项目背景: spring 全家桶, 4.0 以上版本
2、 在springmvc.xml 中,已经配置了 jackson 相关的jar包 (若未配置 jackson也会导致406报错,配置方法可参考这篇文章: http://blog.youkuaiyun.com/random0708/article/details/52087676
3、通过分析 Response Headers 可以发现,springmvc 响应的是一个 html ,而实际返回值为 json数据,这是导致406错误的原因所在了。

这里写图片描述

4、解决办法:
a. 若springmvc未设置拦截 *.html 的请求, 直接在 url 后面去掉 .html 即可解决问题。
b. 若springmvc设置了拦截 .html 的请求,可在 web.xml中增加新的过滤拦截。 如: .action (一个servlet 可以设置多个 servlet-mapping)


<servlet-mapping>
    <servlet-name>springServlet</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

五、总结
1、在springmvc开发中,遇到需要返回json数据的,请勿使用 .html 的后缀。 我的理解是 springmvc 在接收到 .html 的后缀,会认为需要返回一个 html 页面,而实际返回的是 json数据,就会导致报错406。 (若有全面的理解,请留言告知,谢谢)

参考资料: http://blog.youkuaiyun.com/random0708/article/details/52087676
https://www.cnblogs.com/zihuwuyu/p/5189534.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值