HTTP 406 错误指无法接收 (Not acceptable)错误。
-
出现406一般有两种原因:
-
Jackson包不存在(springMVC默认依赖Jackson包 )。
-
使用了@ResponseBody,返回数据后缀是.json,但是ajax请求的url后缀又是.html,最后浏览器收到数据不知该以哪种类型来解析数据,.html会被浏览器当作是静态页面,ajax请求返回了json数据,一静一动,浏览器不知如何处理,所以就会报406状态码。
-
-
406的解决办法:
-
查看Jackson包是否存在(80%是这种情况)
-
检查java代码中是否使用了@ResponseBody注解,Springmvc框架中的@responseBody注解返回json数据
-
检查web.xml下的相应后缀是否为.html
-
问题出在请求的后缀.html,会欺骗浏览器当做一个静态网页来解析,是一个简单的SEO优化。一般来说是没问题的。但是这里我们使用了@ResponseBody,返回数据后缀是.json,但是ajax请求的url后缀又是.html,最后浏览器收到数据不知该以哪种类型数据来进行解析,所以就会报406状态码。
-
解决方法将web.xml中的映射器的url-pattern的后缀改为其他的.action,.do或者加个.json,然后修改ajax请求时的url后缀为.json都可以。
至此,出现406的所有原因都已排除,406的问题就能得到解决。