HTTP メッセージ変換

spring-web モジュールには、InputStream および OutputStream を介して HTTP リクエストおよびレスポンスの本文を読み書きするための HttpMessageConverter インターフェースが含まれています。HttpMessageConverter インスタンスは、クライアント側 (たとえば、RestClient) とサーバー側 (たとえば、Spring MVC REST コントローラー) で使用されます。

メインメディア (MIME) 型の具体的な実装はフレームワークで提供され、デフォルトでクライアント側では RestClient および RestTemplate に、サーバー側では RequestMappingHandlerAdapter に登録されます ( メッセージコンバーターの構成を参照)。

HttpMessageConverter のいくつかの実装を以下に説明します。完全なリストについては、HttpMessageConverter Javadoc を参照してください。すべてのコンバーターでデフォルトのメディア型が使用されますが、supportedMediaTypes プロパティを設定することでこれをオーバーライドできます。

表 1: HttpMessageConverter の実装
MessageConverter 説明

StringHttpMessageConverter

HTTP リクエストとレスポンスから String インスタンスを読み書きできる HttpMessageConverter 実装。デフォルトでは、このコンバーターはすべてのテキストメディア型 (text/*) をサポートし、Content-Type または text/plain で書き込みます。

FormHttpMessageConverter

HTTP リクエストとレスポンスからフォームデータを読み書きできる HttpMessageConverter 実装。デフォルトでは、このコンバーターは application/x-www-form-urlencoded メディア型を読み書きします。フォームデータは MultiValueMap<String, String> から読み取られ、MultiValueMap<String, String> に書き込まれます。コンバーターは、MultiValueMap<String, Object> から読み取られたマルチパートデータを書き込むこともできます (読み取りはできません)。デフォルトでは、multipart/form-data がサポートされています。フォームデータの書き込み用に、追加のマルチパートサブ型をサポートできます。詳細については、FormHttpMessageConverter の Javadoc を参照してください。

ByteArrayHttpMessageConverter

HTTP リクエストとレスポンスからバイト配列を読み書きできる HttpMessageConverter 実装。デフォルトでは、このコンバーターはすべてのメディア型(*/*)をサポートし、application/octet-stream の Content-Type で書き込みます。supportedMediaTypes プロパティを設定し、getContentType(byte[]) をオーバーライドすることにより、これをオーバーライドできます。

MarshallingHttpMessageConverter

org.springframework.oxm パッケージから Spring の Marshaller および Unmarshaller 抽象化を使用して XML を読み書きできる HttpMessageConverter 実装。このコンバーターを使用するには、Marshaller および Unmarshaller が必要です。これらは、コンストラクターまたは Bean プロパティを介して注入できます。デフォルトでは、このコンバーターは text/xml および application/xml をサポートしています。

MappingJackson2HttpMessageConverter

Jackson の ObjectMapper を使用して JSON を読み書きできる HttpMessageConverter 実装。Jackson が提供するアノテーションを使用して、必要に応じて JSON マッピングをカスタマイズできます。さらに制御する必要がある場合 (特定の型に対してカスタム JSON シリアライザー / デシリアライザーを提供する必要がある場合)、ObjectMapper プロパティを通じてカスタム ObjectMapper を挿入できます。デフォルトでは、このコンバーターは application/json をサポートします。これには com.fasterxml.jackson.core:jackson-databind 依存関係が必要です。

MappingJackson2XmlHttpMessageConverter

Jackson XML [GitHub] (英語) 拡張機能の XmlMapper を使用して XML を読み書きできる HttpMessageConverter 実装。必要に応じて、JAXB または Jackson のアノテーションを使用して XML マッピングをカスタマイズできます。さらに制御する必要がある場合 (特定の型に対してカスタム XML シリアライザー / デシリアライザーを提供する必要がある場合)、ObjectMapper プロパティを通じてカスタム XmlMapper を挿入できます。デフォルトでは、このコンバーターは application/xml をサポートします。これには、com.fasterxml.jackson.dataformat:jackson-dataformat-xml 依存関係が必要です。

MappingJackson2CborHttpMessageConverter

com.fasterxml.jackson.dataformat:jackson-dataformat-cbor

SourceHttpMessageConverter

HTTP リクエストおよびレスポンスから javax.xml.transform.Source を読み書きできる HttpMessageConverter 実装。DOMSourceSAXSourceStreamSource のみがサポートされています。デフォルトでは、このコンバーターは text/xml および application/xml をサポートします。

GsonHttpMessageConverter

"Google Gson" を使用して JSON を読み書きできる HttpMessageConverter 実装。これには com.google.code.gson:gson 依存関係が必要です。

JsonbHttpMessageConverter

Jakarta Json Bind API を使用して JSON を読み書きできる HttpMessageConverter 実装。これには、jakarta.json.bind:jakarta.json.bind-api 依存関係と利用可能な実装が必要です。

ProtobufHttpMessageConverter

"application/x-protobuf" コンテンツ型を使用してバイナリ形式で Protobuf メッセージを読み書きできる HttpMessageConverter 実装。これには com.google.protobuf:protobuf-java 依存関係が必要です。

ProtobufJsonFormatHttpMessageConverter

Protobuf メッセージとの間で JSON ドキュメントの読み取りと書き込みができる HttpMessageConverter 実装。これには com.google.protobuf:protobuf-java-util 依存関係が必要です。