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

    xiaoxiao2023-10-05  159

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

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

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

    那我们来看看网页状态:

    状态码: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中的一句配置

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

    再来看一下结果:

    最新回复(0)