今日、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メソッドを追加するだけです。