今天在项目开发中,前端页面使用ajax访问springmvc的控制器,发现路径是对的,进入了控制器,但是在数据返回的时候前端就报406的错,搞了一下午不知道什么原因,第二天早上一来思路就清晰了。

状态码406:HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。说白了就是后台的返回结果前台无法解析就报406错误。

示例代码中请求代码,后台代码均正常,且有返回信息。如下图:

关于请求出现 Status Code: 406 Not Acceptable

关于请求出现 Status Code: 406 Not Acceptable

那我们来看看网页状态:

关于请求出现 Status Code: 406 Not Acceptable

状态码:406,请求头(Request Headers)中看到请求信息是json格式,响应头(Response Hraders)中却发现返回信息的格式是“text/html”,前台无法解析,需将结果转换成json格式返回给前台。

解决方案:

网上有很多人说这个问题很有可能是缺少jackson包导致的,需要引入jackson-core和jackson-mapper-asl的依赖包等,很明显这不是问题的关键,一般不会是这个原因,如果是使用了springMVC的项目,需要关注springMVC的一个配置,具体原因请看原理解析。

原理解析:为什么网上说出现此问题90%以上只要导入jar就好了呢?是因为spring mvc 配置了 <mvc:annotation-driver/> 后 ,如果classpath 里面包含jackson 包,则自动注册MappingJackson2HttpMessageConverter,从而支持json 输出。

annotation-driver是被AnnotationDrivenBeanDefinitionParser解析,底层原因博主也不是很懂,需要多看源码,这里提供另外一篇博文,希望有所帮助。

https://blog.csdn.net/taotoxht/article/details/54136890?locationNum=4&fps=1

下面是springMVC中的一句配置

关于请求出现 Status Code: 406 Not Acceptable

在springMVC的配置文件中,除了要配置自动扫描<context:component-scan base-package="" />外,还需要配置注解处理器<mvc:annotation-driven />,加上了这个配置信息,问题得到解决。

再来看一下结果:

关于请求出现 Status Code: 406 Not Acceptable

相关文章:

  • 2022-12-23
  • 2021-12-30
  • 2021-08-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-31
猜你喜欢
  • 2021-08-03
  • 2022-12-23
  • 2021-09-16
  • 2021-05-21
  • 2022-12-23
  • 2021-06-29
  • 2022-12-23
相关资源
相似解决方案