web-dev-qa-db-ja.com

Spring 4.1.1RELEASEと@ResponseBodyはHTTP406を返します

私は@ResponseBodyを使用してSpringMVCでJsonオブジェクトを返しています。リリース4.0.7および3.2.11では期待どおりに機能しますが、他の構成を変更せずに最新のSpringリリース4.1.1(10/16現在)を使用しようとすると、HTTPステータス406が返されます。これはバグと見なされますか、それとも4.1.1では異なる構成が必要ですか?

最新のjacksonjarはすでにクラスパスにあります

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

春の例 document 正常に動作します

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

戻り値の型がStringの場合。この問題は、戻り値の型がPOJOの場合に発生します。

11
Dino Tw

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>

およびSpringMVC構成ファイル(例: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>
17
Vito

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/

サーブレット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>

ジャクソンアノテーションがクラスファイルにインポートされている場合は、それも置き換える必要があります

削除

org.codehaus.jackson.annotate.JsonIgnorePropertiesをインポートします

追加

com.fasterxml.jackson.annotation.JsonIgnorePropertiesをインポートします

8
Alias Eldhose

3.2からSpring4.2に移行する同様の問題に苦労していました。取得していた

org.springframework.web.util.NestedServletException:リクエストの処理に失敗しました。ネストされた例外はJava.lang.IllegalArgumentExceptionです:タイプの戻り値のコンバーターが見つかりません:

例外名で見つけられるようにここに投稿してください:)この記事を見つけるのに半日かかりました。 @Vitoと@Aiasに感謝します

以前の両方の回答の組み合わせも同様に機能します。カスタムcontentNegotiationManagerを登録したくない場合は、次のようにすることができます。

からすべてのjackson依存関係を削除します

pom.xml

最新のものを使用します

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

サーブレット.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
Vlad