HTTP Status 406. Spring MVC 4.0, jQuery, JSON
Solution 1:
The main issue here is that the path "/test.htm"
is going to use content negotiation first before checking the value of an Accept
header. With an extension like *.htm
, Spring will use a org.springframework.web.accept.ServletPathExtensionContentNegotiationStrategy
and resolve that the acceptable media type to return is text/html
which does not match what MappingJacksonHttpMessageConverter
produces, ie. application/json
and therefore a 406 is returned.
The simple solution is to change the path to something like /test
, in which content negotiation based on the path won't resolve any content type for the response. Instead, a different ContentNegotiationStrategy
based on headers will resolve the value of the Accept
header.
The complicated solution is to change the order of the ContentNegotiationStrategy
objects registered with the RequestResponseBodyMethodProcessor
which handles your @ResponseBody
.
Solution 2:
I had the same problem in the end it was the version of org.codehaus.jackson 1.9.x, when I switched from 1.9.x jackson to 2.x (fasterxml) in my pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
also is necesary : <mvc:annotation-driven />