クラス FormHttpMessageConverter
- 実装されているすべてのインターフェース:
HttpMessageConverter<MultiValueMap<StringSE,?>>
- 既知の直属サブクラス
AllEncompassingFormHttpMessageConverter
HttpMessageConverter の実装により、「通常の」HTML フォームの読み取りと書き込み、およびマルチパートデータの書き込み(読み取りは不可)(ファイルのアップロードなど)を行うことができます。 つまり、このコンバーターは "application/x-www-form-urlencoded" メディア型を MultiValueMap<String, String> として読み書きでき、"multipart/form-data" および "multipart/mixed" メディア型を MultiValueMap<String, Object> として書き込むこともできます(ただし、読み取ることはできません)。
マルチパートデータ
デフォルトでは、マルチパートデータを書き込むときにコンテンツ型として "multipart/form-data" が使用されます。Spring Framework 5.2 以降では、マルチパートサブ型がサポートされているメディア型として登録されており、マルチパートデータを書き込むときに目的のマルチパートサブ型がコンテンツ型として指定されている限り、"multipart/mixed" や "multipart/related" などの他のマルチパートサブ型を使用してマルチパートデータを書き込むこともできます。デフォルトでは、サポートされるメディア型として "multipart/mixed" が登録されていることに注意してください。
マルチパートデータを書き込む場合、このコンバーターは他の HttpMessageConverters を使用してそれぞれの MIME パートを書き込みます。デフォルトでは、基本配列はバイト配列 String および Resource に登録されています。これらは、setPartConverters(java.util.List<org.springframework.http.converter.HttpMessageConverter<?>>) でオーバーライドするか、addPartConverter(org.springframework.http.converter.HttpMessageConverter<?>) で拡張できます。
サンプル
次のスニペットは、"multipart/form-data" コンテンツ型を使用して HTML フォームを送信する方法を示しています。
RestTemplate restTemplate = new RestTemplate();
// AllEncompassingFormHttpMessageConverter is configured by default
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("field 1", "value 1");
form.add("field 2", "value 2");
form.add("field 2", "value 3");
form.add("field 3", 4); // non-String form values supported as of 5.1.4
restTemplate.postForLocation("https://example.com/myForm", form); 次のスニペットは、"multipart/form-data" コンテンツ型を使用してファイルをアップロードする方法を示しています。
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
parts.add("field 1", "value 1");
parts.add("file", new ClassPathResource("myFile.jpg"));
restTemplate.postForLocation("https://example.com/myFileUpload", parts); 次のスニペットは、"multipart/mixed" コンテンツ型を使用してファイルをアップロードする方法を示しています。
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
parts.add("field 1", "value 1");
parts.add("file", new ClassPathResource("myFile.jpg"));
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.MULTIPART_MIXED);
restTemplate.postForLocation("https://example.com/myFileUpload",
new HttpEntity<>(parts, requestHeaders)); 次のスニペットは、"multipart/related" コンテンツ型を使用してファイルをアップロードする方法を示しています。
MediaType multipartRelated = new MediaType("multipart", "related");
restTemplate.getMessageConverters().stream()
.filter(FormHttpMessageConverter.class::isInstance)
.map(FormHttpMessageConverter.class::cast)
.findFirst()
.orElseThrow(() -> new IllegalStateException("Failed to find FormHttpMessageConverter"))
.addSupportedMediaTypes(multipartRelated);
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
parts.add("field 1", "value 1");
parts.add("file", new ClassPathResource("myFile.jpg"));
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(multipartRelated);
restTemplate.postForLocation("https://example.com/myFileUpload",
new HttpEntity<>(parts, requestHeaders));その他
このクラスの一部のメソッドは org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity に触発されました。
- 導入:
- 3.0
- 作成者:
- Arjen Poutsma, Rossen Stoyanchev, Juergen Hoeller, Sam Brannen
- 関連事項:
フィールドのサマリー
フィールドコンストラクターの概要
コンストラクターメソッドのサマリー
修飾子と型メソッド説明voidaddPartConverter(HttpMessageConverter<?> partConverter) メッセージ本文コンバーターを追加します。voidaddSupportedMediaTypes(MediaType... supportedMediaTypes) このコンバーターでサポートされるMediaTypeオブジェクトを追加します。boolean指定されたクラスがこのコンバーターで読み取れるかどうかを示します。boolean指定されたクラスをこのコンバーターで書き込めるかどうかを示します。protected byte[]マルチパート境界を生成します。protected StringSEgetFilename(ObjectSE part) 指定されたマルチパートパーツのファイル名を返します。protected MediaTypegetFormContentType(MediaType contentType) 優先コンテンツ型を指定して、フォームの作成に使用されるコンテンツ型を返します。protected HttpEntity<?>getHttpEntity(ObjectSE part) 指定されたパーツオブジェクトのHttpEntityを返します。MIME パーツ用に構成されたコンバーターを返します。このコンバーターでサポートされているメディア型のリストを返します。read(ClassSE<? extends MultiValueMap<StringSE, ?>> clazz, HttpInputMessage inputMessage) 指定された入力メッセージから指定された型のオブジェクトを読み取り、それを返します。protected StringSEserializeForm(MultiValueMap<StringSE, ObjectSE> formData, CharsetSE charset) voidsetCharset(CharsetSE charset) リクエストまたはレスポンスContent-Typeヘッダーで明示的に指定されていない場合に、フォームデータの読み取りおよび書き込みに使用するデフォルトの文字セットを設定します。voidsetMultipartCharset(CharsetSE charset) ファイル名をエンコードするマルチパートデータを書き込むときに使用する文字セットを設定します。voidsetPartConverters(ListSE<HttpMessageConverter<?>> partConverters) 使用するメッセージ本文コンバーターを設定します。voidsetSupportedMediaTypes(ListSE<MediaType> supportedMediaTypes) このコンバーターによってサポートされるMediaTypeオブジェクトのリストを設定します。voidwrite(MultiValueMap<StringSE, ?> map, MediaType contentType, HttpOutputMessage outputMessage) 指定されたオブジェクトを指定された出力メッセージに書き込みます。クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース org.springframework.http.converter.HttpMessageConverter から継承されたメソッド
getSupportedMediaTypes
フィールドの詳細
DEFAULT_CHARSET
コンバーターが使用するデフォルトの文字セット。
コンストラクターの詳細
FormHttpMessageConverter
public FormHttpMessageConverter()
メソッドの詳細
setSupportedMediaTypes
このコンバーターによってサポートされるMediaTypeオブジェクトのリストを設定します。addSupportedMediaTypes
このコンバーターでサポートされるMediaTypeオブジェクトを追加します。提供された
MediaTypeオブジェクトは、サポートされている MediaType オブジェクトのリストに追加されます。- パラメーター:
supportedMediaTypes- 追加するMediaTypeオブジェクトの var-args リスト- 導入:
- 5.2
- 関連事項:
getSupportedMediaTypes
このコンバーターでサポートされているメディア型のリストを返します。このリストは、考えられるすべてのターゲット要素型に適用されるとは限らないため、このメソッドの呼び出しは通常、canWrite(clazz, nullを介して保護する必要があります。このリストでは、特定のクラスでのみサポートされている MIME 型を除外することもできます。または、HttpMessageConverter.getSupportedMediaTypes(Class)を使用してより正確なリストを作成します。- 次で指定:
- インターフェース
HttpMessageConverter<MultiValueMap<StringSE,の?>> getSupportedMediaTypes - 戻り値:
- サポートされているメディア型のリスト
- 関連事項:
setPartConverters
使用するメッセージ本文コンバーターを設定します。これらのコンバーターは、オブジェクトを MIME パーツに変換するために使用されます。getPartConverters
MIME パーツ用に構成されたコンバーターを返します。- 導入:
- 5.3
addPartConverter
メッセージ本文コンバーターを追加します。このようなコンバーターは、オブジェクトを MIME パーツに変換するために使用されます。setCharset
リクエストまたはレスポンスContent-Typeヘッダーで明示的に指定されていない場合に、フォームデータの読み取りおよび書き込みに使用するデフォルトの文字セットを設定します。4.3 の時点で、これはマルチパートリクエストのテキスト本文の変換のデフォルトの文字セットとしても使用されます。
5.0 の時点で、これは、(相互に排他的な)
multipartCharsetも設定されていない限り、Content-Disposition(およびそのファイル名パラメーター)を含むパーツヘッダーにも使用されます。この場合、パーツヘッダーは ASCII としてエンコードされ、 ファイル名は RFC 2047 のencoded-word構文でエンコードされます。デフォルトでは、これは "UTF-8" に設定されています。
setMultipartCharset
ファイル名をエンコードするためにマルチパートデータを書き込むときに使用する文字セットを設定します。エンコードは、RFC 2047 で定義されているencoded-word構文に基づいており、jakarta.mailからのMimeUtilityに依存しています。5.0 のデフォルトでは、
Content-Disposition(およびそのファイル名パラメーター)を含むパーツヘッダーは、デフォルトでsetCharset(Charset)またはUTF-8の設定に基づいてエンコードされます。- 導入:
- 4.1.1
- 関連事項:
canRead
インターフェースからコピーされた説明:HttpMessageConverter指定されたクラスがこのコンバーターで読み取れるかどうかを示します。- 次で指定:
- インターフェース
HttpMessageConverter<MultiValueMap<StringSE,の?>> canRead - パラメーター:
clazz- 読み込み可能性をテストするクラスmediaType- 読み取るメディア型(指定しない場合はnullにできます); 通常、Content-Typeヘッダーの値。- 戻り値:
- 読み取り可能な場合は
true。それ以外の場合はfalse
canWrite
インターフェースからコピーされた説明:HttpMessageConverter指定されたクラスをこのコンバーターで書き込めるかどうかを示します。- 次で指定:
- インターフェース
HttpMessageConverter<MultiValueMap<StringSE,の?>> canWrite - パラメーター:
clazz- 書き込み可能性をテストするクラスmediaType- 書き込むメディア型(指定しない場合はnullにすることができます); 通常、Acceptヘッダーの値。- 戻り値:
- 書き込み可能な場合は
true。それ以外の場合はfalse
read
public MultiValueMap<StringSE,StringSE> read(@Nullable ClassSE<? extends MultiValueMap<StringSE, ?>> clazz, HttpInputMessage inputMessage) throws IOExceptionSE, HttpMessageNotReadableExceptionインターフェースからコピーされた説明:HttpMessageConverter指定された入力メッセージから指定された型のオブジェクトを読み取り、それを返します。- 次で指定:
- インターフェース
HttpMessageConverter<MultiValueMap<StringSE,の?>> read - パラメーター:
clazz- 返すオブジェクトの型。この型は、このインターフェースのcanReadメソッドに事前に渡されている必要があります。このメソッドはtrueを返している必要があります。inputMessage- 読み込む HTTP 入力メッセージ- 戻り値:
- 変換されたオブジェクト
- 例外:
IOExceptionSE- I/O エラーの場合HttpMessageNotReadableException- 変換エラーの場合
write
public void write(MultiValueMap<StringSE, ?> map, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOExceptionSE, HttpMessageNotWritableExceptionインターフェースからコピーされた説明:HttpMessageConverter指定されたオブジェクトを指定された出力メッセージに書き込みます。- 次で指定:
- インターフェース
HttpMessageConverter<MultiValueMap<StringSE,の?>> write - パラメーター:
map- 出力メッセージに書き込むオブジェクト。このオブジェクトの型は、このインターフェースのcanWriteメソッドに事前に渡されている必要があります。このメソッドはtrueを返している必要があります。contentType- 書き込み時に使用するコンテンツ型。コンバーターのデフォルトのコンテンツ型を使用する必要があることを示すnullの場合があります。nullでない場合、このメディア型は、このインターフェースのcanWriteメソッドに事前に渡されている必要があり、trueが返されている必要があります。outputMessage- 書き込むメッセージ- 例外:
IOExceptionSE- I/O エラーの場合HttpMessageNotWritableException- 変換エラーの場合
getFormContentType
優先コンテンツ型を指定して、フォームの記述に使用されるコンテンツ型を返します。デフォルトでは、このメソッドは指定されたコンテンツ型を返しますが、文字セットがない場合は文字セットを追加します。contentTypeがnullの場合、application/x-www-form-urlencoded; charset=UTF-8が返されます。サブクラスはこのメソッドをオーバーライドして、この動作を変更できます。
- パラメーター:
contentType- 優先コンテンツ型 (nullにすることができます)- 戻り値:
- 使用するコンテンツ型
- 導入:
- 5.2.2
serializeForm
generateMultipartBoundary
protected byte[] generateMultipartBoundary()マルチパート境界を生成します。この実装は
MimeTypeUtils.generateMultipartBoundary()に委譲します。getHttpEntity
指定されたパーツオブジェクトのHttpEntityを返します。- パラメーター:
part-HttpEntityを返す部分- 戻り値:
- パーツオブジェクト自体は
HttpEntity、またはそのパーツ用に新しく構築されたHttpEntityラッパー
getFilename
指定されたマルチパートパーツのファイル名を返します。この値はContent-Dispositionヘッダーに使用されます。デフォルトの実装は、パーツが
Resourceの場合はResource.getFilename()を返し、それ以外の場合はnullを返します。サブクラスでオーバーライドできます。- パラメーター:
part- ファイル名を決定する部分- 戻り値:
- ファイル名、または不明の場合は
null