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 包截图:
引用来自“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跟踪一下就大概清楚了
求大神指导下!
问题没有,<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 这个配置去掉试试看,一般不需要配置这个,默认的。
@RequestMapping(value="save")
这个改成
@RequestMapping(value="save.json")
请求该地址的地方相应的改!一般就是这个问题!
引用来自“F_L_F”的评论
@RequestMapping(value="save")
这个改成
@RequestMapping(value="save.json")
请求该地址的地方相应的改!一般就是这个问题!
为什么要改成xxx.json 我我拦截的是xxx.html的URL,如果改成xxx.json的格式了,就不是不能拦截了吗,那进不了controller了啊
引用来自“贰狮叔”的评论
问题没有,<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 这个配置去掉试试看,一般不需要配置这个,默认的。
没有效果
你直接return user了,没有做任何JSON处理啊
引用来自“颜_”的评论
你直接return user了,没有做任何JSON处理啊
这不是就要用springmvc +jackson的新特性吗 不用自己处理,配置Jackson就会自动给你转换成json
引用来自“F_L_F”的评论
@RequestMapping(value="save")
这个改成
@RequestMapping(value="save.json")
请求该地址的地方相应的改!一般就是这个问题!
引用来自“org.zhanghua”的评论
为什么要改成xxx.json 我我拦截的是xxx.html的URL,如果改成xxx.json的格式了,就不是不能拦截了吗,那进不了controller了啊
请问为什么springmvc mapping的URL不能以.html的后缀,请指教。