ホームページ  >  記事  >  Java  >  SpringBoot HttpMessageConverterメッセージコンバータの使用方法

SpringBoot HttpMessageConverterメッセージコンバータの使用方法

PHPz
PHPz転載
2023-05-10 19:40:041664ブラウズ

メッセージコンバータの役割

  • リクエストメッセージをJavaオブジェクトに変換する

  • Javaオブジェクトをレスポンスメッセージに変換する

メッセージ コンバータの主なメソッド

  • getSupportedMediaTypes: サポートされている MediaType コレクション (text/html、text/plain、application/json など) を取得します。 )

  • canRead: 読み込み可能か判定(リクエスト)

  • read: リクエストデータのフォーマット変換(リターン時に呼び出されます) canRead メソッドの値が true )

  • canWrite: 書き込み可能かどうか判定(応答)

  • write: フォーマットを変換応答データ (canWrite メソッドの戻り値が true の場合 Call)

デフォルト設定されたメッセージ コンバータ

SpringMVC は一部の HttpMessageConverter (WebMvcConfigurationSupport クラスの addDefaultHttpMessageConverters) を自動的に設定します起動時のメソッド

#ソース コードは次のとおりです。

	protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
		messageConverters.add(new ByteArrayHttpMessageConverter());
		messageConverters.add(new StringHttpMessageConverter());
		messageConverters.add(new ResourceHttpMessageConverter());
		messageConverters.add(new ResourceRegionHttpMessageConverter());
		try {
			messageConverters.add(new SourceHttpMessageConverter<>());
		}
		catch (Throwable ex) {
			// Ignore when no TransformerFactory implementation is available...
		}
		messageConverters.add(new AllEncompassingFormHttpMessageConverter());
		if (romePresent) {
			messageConverters.add(new AtomFeedHttpMessageConverter());
			messageConverters.add(new RssChannelHttpMessageConverter());
		}
		if (jackson2XmlPresent) {
			Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();
			if (this.applicationContext != null) {
				builder.applicationContext(this.applicationContext);
			}
			messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));
		}
		else if (jaxb2Present) {
			messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
		}
		if (jackson2Present) {
			Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json();
			if (this.applicationContext != null) {
				builder.applicationContext(this.applicationContext);
			}
			messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build()));
		}
		else if (gsonPresent) {
			messageConverters.add(new GsonHttpMessageConverter());
		}
		else if (jsonbPresent) {
			messageConverters.add(new JsonbHttpMessageConverter());
		}
		if (jackson2SmilePresent) {
			Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.smile();
			if (this.applicationContext != null) {
				builder.applicationContext(this.applicationContext);
			}
			messageConverters.add(new MappingJackson2SmileHttpMessageConverter(builder.build()));
		}
		if (jackson2CborPresent) {
			Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.cbor();
			if (this.applicationContext != null) {
				builder.applicationContext(this.applicationContext);
			}
			messageConverters.add(new MappingJackson2CborHttpMessageConverter(builder.build()));
		}
	}

部分メッセージ コンバーターの解析

# #DescriptionMappingJackson2HttpMessageConverterJSON 形式のデータの読み取りと書き込みを担当します (Jackson を使用) # #AllEncompassingFormHttpMessageConverterJaxb2RootElementHttpMessageConverterByteArrayHttpMessageConverterStringHttpMessageConverterResourceHttpMessageConverterSourceHttpMessageConverter注意事項
Name
フォーム フォーム データの読み取りと書き込みを担当します
XML 形式データの読み取りと書き込みを担当します (JAXB を使用)
バイナリ形式データの読み取りと書き込みを担当します
は文字列の読み取りと書き込みを担当しますformat data
はリソース ファイル データの読み取りと書き込みを担当します
担当リソース データの読み取りと書き込み用

##システムには、デフォルトで構成された一連のメッセージ コンバーターがあります。

処理プロセスは、収集された順序で適切なメッセージ コンバータを照合します。適切なメッセージ コンバータがあれば、そのメッセージ コンバータが処理 (読み取り、書き込み) に使用され、それ以降のメッセージ コンバータは処理されません。実行されました。

カスタム メッセージ コンバーターを有効にするには、コレクション内の同じ種類のメッセージ コンバーターの前に配置する必要があります。理由については、2 番目の点を参照してください。

考察: カスタム メッセージ コンバーターはコレクション内の同じタイプのメッセージ コンバーターの前に配置する必要があるため、コレクション内の元のメッセージ コンバーターを追加せずにカスタム効果を実現するために直接変更できるでしょうか。 (まだ調査されていません)。

カスタム メッセージ コンバーターを追加するときは、デフォルトのメッセージ コンバーターが有効かどうかに注意してください

    WebMvcConfigurer.configureMessageConverters メソッドはデフォルトのメッセージ コンバーター セットをオーバーライドします
  • WebMvcConfigurer.extendMessageConverters メソッドはデフォルトのメッセージ コンバータ コレクションをオーバーライドしません

以上がSpringBoot HttpMessageConverterメッセージコンバータの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。