今天在用SpringMVC测试返回json数据时出现了406错误,翻了网上的很多篇文章没有解决,先列举一下比较多数的情况:
一、Jackson包没有正确导入。
我的依赖是已经添加的
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.0</version>
</dependency>
也有对应的库
二、SpringMVC版本和Jackson版本不兼容
我使用的SpringMVC版本是4.1.2-RELEASE ,Jackson版本是上面的2.10.0,这个地方是没有问题的。
三、没有配置装载对应HttpMessageConverter
Spring默认六个HttpMessageConverter,要实现json转换需要装载jackson的HttpMessageConverter,如果是单独配置,在springmvc的配置文件添加
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</list>
</property>
</bean>
或者 添加注解驱动标签,一般都是这种方法
<mvc:annotation-driven/>
四、DispatcherServlet的url-pattern以.html结尾
我的web.xml配置是
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
没有出现这种.html结尾问题,如果有这种问题改掉即可,必须使用.html结尾的话,再添加一个url-pattern
<servlet-mapping>
<servlet-name>dispatch</servlet-name>
<url-pattern>*.html</url-pattern>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
五、用于转换的类存在问题
这是我的情况,我在为学习前端临时写一个接口时,简易地定义了一个没有get方法的类,于是出现的406的情况。因此只要给类的属性添加上get方法即可。