SpringMVCは@ResponseBodyアノテーションを使用して、jsonを406が表示されるいくつかの状況に変換します

今日、SpringMVCテストでjsonデータを返すときに406エラーが発生しました。インターネットで多くの記事をチェックしましたが、解決できませんでした。最も一般的な状況を挙げてみましょう:

1. Jacksonパッケージが正しくインポートされていません。

私の依存関係はすでに追加されています

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.10.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.10.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.10.0</version>
</dependency>

対応するライブラリもあります
ここに画像の説明を挿入

2、SpringMVCバージョンとJacksonバージョンは互換性がありません

私が使用しているSpringMVCのバージョンは4.1.2-RELEASEで、Jacksonのバージョンは上記の2.10.0ですが、ここでは問題ありません。

3、対応するHttpMessageConverterをロードする構成はありません

Springのデフォルトは6つのHttpMessageConverterです。json変換を行うには、JacksonのHttpMessageConverterをロードする必要があります。個別に構成されている場合は、springmvc構成ファイルに追加してください

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            </list>
        </property>
</bean>
または、アノテーション駆動型のタグを追加します。通常はこの方法です
<mvc:annotation-driven/>

4番目に、DispatcherServletのurl-patternは.htmlで終わります

私のweb.xml構成は

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

.htmlの終わりにはそのような問題はありません。そのような問題がある場合は変更できます。.htmlの終わりを使用する必要がある場合は、別のurl-patternを追加します

<servlet-mapping>
        <servlet-name>dispatch</servlet-name>
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.json</url-pattern>
 </servlet-mapping>

5、変換に使用されるクラスに問題があります

これが私の状況で、学習フロントエンドのインターフェイスを一時的に作成したときに、getメソッドを使用せずにクラスを定義しただけで、406の状況が発生しました。したがって、クラスのプロパティにgetメソッドを追加するだけです。

おすすめ

転載: blog.csdn.net/Baibair/article/details/104859190