提问者:小点点

spring 4.1.1版本和@ResponseBody返回HTTP 406


我正在使用@ResponseBody返回spring MVC中的Json对象。它在4.0.7和3.2.11版上正常工作,但当我尝试使用最新的spring 4.1.1版(截至10/16版)时,它返回HTTP状态406,没有任何其他配置更改。这是一个bug还是4.1.1需要不同的配置?

最新的jackson jar已经在类路径中

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

spring文件的例子很好用

@RequestMapping(value = "/something", method = RequestMethod.PUT)
@ResponseBody
public String helloWorld() {
  return "Hello World";
}

当返回类型为字符串时。当返回类型是POJO时就会出现问题。


共3个答案

匿名用户

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>

匿名用户

在删除了jackson 1.*之后,使用2.4.4(JAXRS)替换了它,它将导入所有其他依赖项,jackson核心、jackson数据绑定和jackson注释。

已删除

<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注释,也应该替换它

已删除

导入org.codehaus.jackson.annotate.JsonIgnoreProperties

添加

导入com.fasterxml.jackson.annotation.JsonIgnoreProperties

匿名用户

从3.2迁移到spring 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>