Restful Data Servicesを構築する過程で、コントローラーとリポジトリを定義し、いくつかの注釈で変更しましたが、これまでにオブジェクト変換を実行していません - JavaエンティティオブジェクトをHTTPデータ出力ストリームに変換しました。 Spring Bootの基礎となるレイヤーは、httpmessageconverterを使用して、Jackson Libraryに依存してJava EntityクラスをJSON形式に出力します。複数のコンバーターが利用可能な場合は、メッセージオブジェクトタイプと必要なコンテンツタイプに従って使用する最適なコンバーターを選択します。
SpringMVCソースコード分析の記事httpmessageconverterには、メッセージコンバーターの位置を明確に示す図があります。
メッセージコンバーターの場所
メッセージコンバーターの目標は、次のとおりです。HTTP入力要求フォーマットのJavaオブジェクトへの変換。 JavaオブジェクトのHTTP出力要求への変換。一部のメッセージコンバーターは複数のデータ型のみをサポートし、一部のメッセージは複数の出力形式をサポートし、一部は両方を提供します。例:mappingjackson2httpmessageconverterはJavaオブジェクトをアプリケーション/jsonに変換できますが、protobufhttpmessageconverterはcom.google.protobuf.messageの入力のみをサポートしますが、出力アプリケーション/JSON、アプリケーション/XML、アプリケーション/XPROTOBUF。
どうしますか
プロジェクトでメッセージコンバーターを構成するには3つの方法があります。主な違いは、カスタマイズ可能性と使いやすさの測定です。
@Bean定義をWebConfigurationクラスに追加します
@beanpublic bytearrayhttpmessageconverter bytearrayhttpmessageconverter(){新しいbytearrayhttpmessageconverter();} ConfigureMessageConvertersメソッドをオーバーライドして、既存のメッセージコンバーターリンクリストを拡張します。
@OverridePublic void configuremessageconverters(list <httpmessageconverter <?
詳細を制御するには、ExtendMessageConvertersメソッドを書き換え、まずコンバーターリストをクリアしてから、カスタムコンバーターを追加できます。
@overridepublic void endocmessageconverters(list <httpmessageconverter <?>> converters){converters.clear(); converters.add(new bytearrayhttpmessageconverter());}分析します
Springは、同じタスクを達成するための複数の方法を提供し、選択したタスクは、利便性とカスタマイズ可能性に焦点を合わせるかどうかによって異なります。
上記の3つの方法の違いは何ですか?
@Bean経由でHTTPMessageConverterを定義することは、前述のサーブレットフィルターの追加と同様に、プロジェクトにメッセージコンバーターを追加する最も簡単な方法です。 spring httpmessageconverterの豆にスプリングスキャンをスキャンすると、コールチェーンに自動的に追加されます。 WebMVCCONFigurerAdapterからプロジェクトのWebConfigurationを継承することをお勧めします。
configuremessageconvertersメソッドを書き直してカスタムコンバーターを追加すると便利ですが、弱点があります。プロジェクトにWebmvcconfigurersの複数のインスタンスがある場合(デフォルトでSpring Bootによって提供される)、ConfigureMessageConvertersメソッドが修正順に実行されることは保証されません。
より粒状制御が必要な場合:他のメッセージコンバーターまたは明確に複製するコンバーターをクリアする場合は、ExtendMessageConverterを書き換えることで実行できますが、この可能性はまだあります。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。