RESTfulなデータサービスを構築する過程で、我々は、コントローラ、リポジトリを定義し、ノートのいくつかと、それらを修正することが、今まで私たちは、変換対象を実行していない - HTTPデータストリーム出力にJavaのエンティティオブジェクトを変換します。
よる春ブーツ底HttpMessageConverters出力するJavaエンティティクラスライブラリとジャクソンJSON形式。コンバータが複数存在する場合に利用可能であり、メッセージのコンテンツタイプ及びオブジェクトタイプは、コンバータの用途に応じて最も適切なを選択します。
でSpringMVC源解析(E) -メッセージコンバータHttpMessageConverter記事、明確メッセージコンバータを得ることができる場所を示す地図があります。
ターゲットメッセージコンバータは、次のとおりです。
- Javaオブジェクトへの着信要求変換HTTP形式;
- HTTPリクエストに変換出力するJavaオブジェクト。
いくつかのメッセージ変換は、一部のみ出力フォーマットの複数、ならびに両方の組み合わせをサポートし、複数種類のデータをサポートします。
たとえば:MappingJackson2HttpMessageConverterを変換することができますJavaは、アプリケーション/ JSONにオブジェクト、およびProtobufHttpMessageConverterはのみをサポートcom.google.protobuf.Messageの入力の種類をすることができますが、出力アプリケーション/ JSON、アプリケーション/ XML、 text / plainで、アプリケーション/ X-いるProtobufそんなにフォーマット。
練習
主にプロジェクトからのメッセージコンバータを構成する3つの方法があるのカスタマイズと使いやすさの二つの側面を測定するためには。
- @Beanクラス定義WebConfigurationを追加
@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
return new ByteArrayHttpMessageConverter();
}
- 書き換え(上書き)configureMessageConvertersの方法、メッセージコンバータは、既存のリストを拡張します。
@Override
public
void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new ByteArrayHttpMessageConverter());
}
- より多くの制御を無効にすることができますextendMessageConvertersの方法を、そしてカスタムコンバータを追加し、第1のコンバータのリストを空にする。
@Override
public
void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.clear();
converters.add(new ByteArrayHttpMessageConverter());
}
分析
春ブーツは、私たちがカスタマイズに重点を置いている都合で、より集中しているその選択に応じて同じタスクを実行するにはいくつかの方法を提供します。
上記の3つの方法は異なるがありますか?
@Beanが定義されHttpMessageConverterこれは前述のと似てサーブレットフィルタを追加し、メッセージコンバータを投影する最も簡単な方法が追加されます。春は、BeanのHttpMessageConverterタイプをスキャンした場合、自動的にコールチェーンに追加されます。推奨はWebMvcConfigurerAdapterから継承されたプロジェクトWebConfigurationを可能にします。
書き換えによってconfigureMessageConvertersのカスタムコンバータを添加する方法が非常に便利ですが、1つの弱点があります:複数のインスタンスのWebMvcConfigurersプロジェクト(私たち自身の定義、またはデフォルトで提供春ブーツ)に存在する場合、この方法は、configureMessageConvertersを確保するために書き換えることができません決まった順序で実行。
あなたはより細かい制御が必要な場合:クリアメッセージコンバータまたはコンバータの他の明確な繰り返しを、あなたは書き換えることができextendMessageConverters完成し、そのような可能性はまだある:WebMvcConfigurer他のインスタンスは、このメソッドをオーバーライドすることができますが、確率は非常に小さいです。
春ブーツ1.xのシリーズ
バックエンド技術、JVMのトラブルシューティングと最適化、Javaのインタビューの質問、個人の成長と自己管理、および他のトピックの数にこのフォーカス、第一線の開発者は、読者のために働くと成長の経験、あなたはここで何かを得ることを期待することができます提供。