SpringMVC Jackson Ajax 返回406错误!

帐号以作废 发布于 2014/04/16 17:19
阅读 6K+
收藏 2

 Spring mvc 使用注解@ResponseBody Ajax请求返回json 报406错误!(使用Jackson转换)

已经加入的Jackson的依赖包,ajax 也没有问题,controller也能正常访问,请大牛指导一下,调试了半天还是报错,尝试了网上很多办法都没有反应,还是报406!

前台js代码:

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.10.2.js" ></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.form.js" ></script>
<script type="text/javascript">
$(function(){
//start
$("#submitBtn").click(function(){
$("#form1").ajaxSubmit({
type:"post",
dataType:"json",
beforeSubmit:function(){
//做校验
//alert(1);
},
success:function(data){
alert(data);
alert("success");
},
error:function(data){
alert("error");
}
});

});
//end
});
</script>

后台代码:

@RequestMapping(value="save")
public @ResponseBody User save(HttpServletRequest request,
HttpServletResponse response,User user) throws Exception {
System.out.println(user.getUsername()+","+user.getPassword());
return user;
}

spirng 配置文:

<!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="cacheSeconds" value="0" />  
        <property name="messageConverters">  
            <list>  
            <!-- 加入Jackson json库 -->
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>  
            </list>  
        </property>
    </bean>  
    

lib 包截图:


加载中
0
F_L_F
F_L_F

引用来自“F_L_F”的评论

@RequestMapping(value="save")

这个改成

@RequestMapping(value="save.json")

请求该地址的地方相应的改!一般就是这个问题!

引用来自“org.zhanghua”的评论

为什么要改成xxx.json 我我拦截的是xxx.html的URL,如果改成xxx.json的格式了,就不是不能拦截了吗,那进不了controller了啊

引用来自“org.zhanghua”的评论

将mapping的URL改为非.html的后缀就可以了!
请问为什么springmvc mapping的URL不能以.html的后缀,请指教。

因为spring 3.?(具体哪个版本忘记了)开始,对request里的header 中的accept(也就是mimetype)进行了识别,如果你指定了拦截后缀,比如你原先的.html,那么不管你是ajax还是平常的页面访问,都会当作text/html处理,而你通过ajax访问并不是text/html,而是application/json(可能是类似的),于是spring mvc给你报了个406错误。可能说的有点乱,具体你可以dug跟踪一下就大概清楚了

tianpeng91
tianpeng91
大神们,有没有办法在不改这个的前提下解决这个问题呢?
0
帐号以作废
帐号以作废

求大神指导下!

0
LucEsape
LucEsape

问题没有,<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  这个配置去掉试试看,一般不需要配置这个,默认的。

0
guxuede
guxuede

把日志级别调低,查看日子

0
F_L_F
F_L_F

@RequestMapping(value="save")

这个改成

@RequestMapping(value="save.json")

请求该地址的地方相应的改!一般就是这个问题!

0
帐号以作废
帐号以作废

引用来自“F_L_F”的评论

@RequestMapping(value="save")

这个改成

@RequestMapping(value="save.json")

请求该地址的地方相应的改!一般就是这个问题!

为什么要改成xxx.json 我我拦截的是xxx.html的URL,如果改成xxx.json的格式了,就不是不能拦截了吗,那进不了controller了啊

0
帐号以作废
帐号以作废

引用来自“贰狮叔”的评论

问题没有,<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  这个配置去掉试试看,一般不需要配置这个,默认的。

没有效果

0
yongzhong
yongzhong

你直接return user了,没有做任何JSON处理啊

0
帐号以作废
帐号以作废

引用来自“颜_”的评论

你直接return user了,没有做任何JSON处理啊

这不是就要用springmvc +jackson的新特性吗 不用自己处理,配置Jackson就会自动给你转换成json

0
帐号以作废
帐号以作废

引用来自“F_L_F”的评论

@RequestMapping(value="save")

这个改成

@RequestMapping(value="save.json")

请求该地址的地方相应的改!一般就是这个问题!

引用来自“org.zhanghua”的评论

为什么要改成xxx.json 我我拦截的是xxx.html的URL,如果改成xxx.json的格式了,就不是不能拦截了吗,那进不了controller了啊

将mapping的URL改为非.html的后缀就可以了!
请问为什么springmvc mapping的URL不能以.html的后缀,请指教。
F_L_F
F_L_F
问题解决了就别忘了把我的回答设置为最佳答案哈,也方便了后来遇到相同问题的人!
返回顶部
顶部