11

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

最新的杰克逊 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 时会出现问题。

4

3 回答 3

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>
于 2014-10-17T03:39:29.610 回答
8

删除 Jackson 1.* 后使用 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注解,也应该替换

已移除

导入 org.codehaus.jackson.annotate.JsonIgnoreProperties

添加

导入 com.fasterxml.jackson.annotation.JsonIgnoreProperties

于 2014-12-12T14:28:14.080 回答
1

我正在努力解决从 3.2 迁移到 spring 4.2 的类似问题。越来越

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.IllegalArgumentException: No converter found for return value of type:

将其发布在这里,以便人们可以通过异常名称找到它:) 我花了半天时间才找到这篇文章。感谢@Vito 和@Aias

结合以前的两个答案也可以,如果您不想注册自定义contentNegotiationManager,您可以执行以下操作:

删除所有杰克逊依赖项

pom.xml

并使用最新的

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-base</artifactId>
    <version>2.6.1</version>
</dependency>

servlet.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>
于 2015-08-14T19:31:42.183 回答