产生错误的背景:springmvc使用<mvc:annotation-driven>进行配置,那么只要引入响应的json解析包就可以了。在pom中已经引入了如下:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.5</version> </dependency>
web.xml配置DispatcherServlet如下:
<servlet> <servlet-name>front</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> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>front</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping>
上面的配置是正确的。但是当使用@ResponseBody注解要返回json数据的方法然后进行访问时,就出现了406错误。
解决方法:错误在于url-pattern。当改为其他后缀时就能成功访问,例如.do、.action。这是因为如果后缀为.html、.htm、.xhtml时,springmvc会将content-type设置为text/html,正确的是application/json,此时返回json对象就出错了。