我正在使用@ResponseBody在Spring MVC中返回Json对象。它在版本4.0.7和3.2.11上按预期工作,但当我尝试使用最新的Spring版本4.1.1(截至10/16)而没有任何其他配置更改时,它返回HTTP状态406。这被认为是一个错误还是4.1.1需要不同的配置?
最新的jackson jar已经在类路径
中<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
Spring document上的示例工作正常
@RequestMapping(value = "/something", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {
return "Hello World";
}
返回类型为String时。当返回类型是POJO时会发生问题。
答案 0 :(得分:17)
Maven pom.xml:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
和spring mvc配置文件(例如:spring-mvc.xml)
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
答案 1 :(得分:8)
删除Jackson后取得了成功。*替换为2.4.4(JAXRS),它将导入所有其他依赖项,jackson-core,jackson-databind和jackson-annotations。
已移除
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<强>加强>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
<version>2.4.4</version>
</dependency>
http://www.codingpedia.org/ama/jquery-ui-autocomplete-not-working-in-spring-4-1/
和servlet xml
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager" />
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false" />
<property name="favorParameter" value="true" />
<property name="mediaTypes" >
<value>
json=application/json
xml=application/xml
</value>
</property>
</bean>
如果在类文件中导入jackson注释,则还应替换它
<强>删除强>
import org.codehaus.jackson.annotate.JsonIgnoreProperties
<强>加强>
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
答案 2 :(得分:1)
我正在努力解决从3.2迁移到4.2的类似问题。 得到了
在此发布,以便人们可以通过例外名称找到它:)我花了半天时间才找到这篇文章。谢谢@Vito和@Aias
前两个答案的组合也可以,如果您不想注册自定义contentNegotiationManager
,您可以执行以下操作:
从
中删除所有jackson依赖项并使用最新的
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-base</artifactId>
<version>2.6.1</version>
</dependency>
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>