2017-10-05 8 views
1

今私はSpring MVCで作業していますが、コントローラのいくつかのメソッドがデータを返さず、HttpMediaTypeNotAcceptableExceptionを投げて、私のメソッドがtext/plainを生成しているという問題がありました。私は誰かがWebMvcConfigurerAdapterSpringでHttpMessageConverterを指定する必要があるのはなぜですか?

configureMessageConverters(List<HttpMessageConverter<?>> converters)
@Autowired 
private MappingJackson2HttpMessageConverter jsonConverter; 

@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
    converters.addAll(Collections.singletonList(jsonConverter)); 
} 

をオーバーライドすることを、私の設定で発見、私はいくつかの記事を読んでいることを発見:デフォルトで は、以下のHttpMessageConvertersインスタンスが事前に有効になっている:

ByteArrayHttpMessageConverter - バイト配列に変換します StringHttpMessageConverter - 文字列を変換します ResourceHttpMessageConverter - org.springframework.core.io.resource任意の種類のオクテットストリームに対してソース SourceHttpMe ssageConverter - javax.xml.transform.Sourceを変換します。 FormHttpMessageConverter - フォームデータを MultiValueMapに/から変換します。 Jaxb2RootElementHttpMessageConverter - は、Javaは、XML(JAXB2が クラスパス上に存在する場合にのみ添加)MappingJackson2HttpMessageConverterへ/からオブジェクトを変換する - JSON (ジャクソン2は、クラスパス上に存在する場合にのみ添加) MappingJacksonHttpMessageConverterを変換 - JSONに変換する(のみ ジャクソン場合に加え私がいることを取り除い) ローマは、クラスパス上に存在する場合にのみ追加(RSSフィードを変換

- はAtomのフィード(ローマがクラスパス上に存在する場合にのみ追加) RssChannelHttpMessageConverterを変換 - クラスパス)AtomFeedHttpMessageConverter上に存在しますコードすべてが正常に動作するようになりました。だから誰もが持っているアイデアは、なぜそれが行われた、私はそのコードが書かれた意味ですか?なぜなら、すべてが箱から出てきており、そのコードは役に立たなかったからです。 質問:

なぜSpringでHttpMessageConverterを指定する必要がありますか?

答えて

3

MappingJackson2HttpMessageConverter3.1.2で追加されていますが、そのバージョンではまだ自動検出されていない可能性があります。

このコードは古いバージョン用に作成されている可能性があり、ライブラリがアップグレードされたときに廃止される可能性があります。それは、それが新しいバージョンで自動であることを知らなかった人によっても書かれている可能性があります(あなたがウェブからランダムにペーストコードをコピーすると、どのようなモンスターが作成されるのか分かりません)。

既定ではまだ設定されていないものを実行していない限り、追加のコンバータを構成する必要はありません。あなたがエキゾチックなことをやっていないのなら、これはまれなことです。

私の質問は、手動で設定するとうまくいかない理由です。これは不要ですが、それは許可されていないわけではありません。物事を壊すべきではありません。

+1

春のフレームワークサイトから:「このサポートクラスを拡張することで、事前登録済みの既定のメッセージコンバータが失われていることにも注意してください。したがって、そのメソッドをオーバーライドすると、メッセージ変換プログラムのみが適用されます。 –

+0

ああ、それは 'WebMvcConfigurerAdapter'にありました。 – Kayaman

関連する問題