public class FormHttpMessageConverter extends ObjectSE implements HttpMessageConverter<MultiValueMap<StringSE,?>>
HttpMessageConverter
の実装により、「通常の」HTML フォームの読み取りと書き込み、およびマルチパートデータの書き込み(読み取りは不可)(ファイルのアップロードなど)を行うことができます。 つまり、このコンバーターは、"application/x-www-form-urlencoded"
メディア型を MultiValueMap<String, String>
として読み書きでき、"multipart/form-data"
メディア型を MultiValueMap<String, Object>
として書き込むこともできます(ただし、読み取ることはできません)。
マルチパートデータを書き込むとき、このコンバーターは他の HttpMessageConverters
を使用してそれぞれの MIME パートを書き込みます。デフォルトでは、基本コンバーターが登録されています(Strings
および Resources
の場合)。これらは、partConverters
プロパティによってオーバーライドできます。
例: 次のスニペットは、HTML フォームを送信する方法を示しています。
RestTemplate template = 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 template.postForLocation("https://example.com/myForm", form);
次のスニペットは、ファイルのアップロード方法を示しています。
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>(); parts.add("field 1", "value 1"); parts.add("file", new ClassPathResource("myFile.jpg")); template.postForLocation("https://example.com/myFileUpload", parts);
このクラスの一部のメソッドは org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity
に触発されました。
AllEncompassingFormHttpMessageConverter
, MultiValueMap
修飾子と型 | フィールドと説明 |
---|---|
static CharsetSE | DEFAULT_CHARSET コンバーターが使用するデフォルトの文字セット。 |
コンストラクターと説明 |
---|
FormHttpMessageConverter() |
修飾子と型 | メソッドと説明 |
---|---|
void | addPartConverter(HttpMessageConverter<?> partConverter) メッセージ本文コンバーターを追加します。 |
boolean | canRead(ClassSE<?> clazz, MediaType mediaType) 指定されたクラスがこのコンバーターで読み取れるかどうかを示します。 |
boolean | canWrite(ClassSE<?> clazz, MediaType mediaType) 指定されたクラスをこのコンバーターで書き込めるかどうかを示します。 |
protected byte[] | generateMultipartBoundary() マルチパート境界を生成します。 |
protected StringSE | getFilename(ObjectSE part) 指定されたマルチパートパーツのファイル名を返します。 |
protected HttpEntity<?> | getHttpEntity(ObjectSE part) 指定されたパーツオブジェクトの HttpEntity を返します。 |
ListSE<MediaType> | getSupportedMediaTypes() このコンバーターがサポートする MediaType オブジェクトのリストを返します。 |
MultiValueMap<StringSE, StringSE> | read(ClassSE<? extends MultiValueMap<StringSE,?>> clazz, HttpInputMessage inputMessage) 指定された入力メッセージから指定された型のオブジェクトを読み取り、それを返します。 |
protected StringSE | serializeForm(MultiValueMap<StringSE, ObjectSE> formData, CharsetSE charset) |
void | setCharset(CharsetSE charset) リクエストまたはレスポンスの Content-Type ヘッダーで明示的に指定されていない場合に、フォームデータの読み取りと書き込みに使用するデフォルトの文字セットを設定します。 |
void | setMultipartCharset(CharsetSE charset) ファイル名をエンコードするマルチパートデータを書き込むときに使用する文字セットを設定します。 |
void | setPartConverters(ListSE<HttpMessageConverter<?>> partConverters) 使用するメッセージ本文コンバーターを設定します。 |
void | setSupportedMediaTypes(ListSE<MediaType> supportedMediaTypes) このコンバーターによってサポートされる MediaType オブジェクトのリストを設定します。 |
void | write(MultiValueMap<StringSE,?> map, MediaType contentType, HttpOutputMessage outputMessage) 指定されたオブジェクトを指定された出力メッセージに書き込みます。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final CharsetSE DEFAULT_CHARSET
public void setSupportedMediaTypes(ListSE<MediaType> supportedMediaTypes)
MediaType
オブジェクトのリストを設定します。public ListSE<MediaType> getSupportedMediaTypes()
HttpMessageConverter
MediaType
オブジェクトのリストを返します。HttpMessageConverter<MultiValueMap<StringSE,?>>
の getSupportedMediaTypes
public void setPartConverters(ListSE<HttpMessageConverter<?>> partConverters)
public void addPartConverter(HttpMessageConverter<?> partConverter)
public void setCharset(@Nullable CharsetSE charset)
4.3 の時点で、これはマルチパートリクエストのテキスト本文の変換のデフォルトの文字セットとしても使用されます。
5.0 以降、これは「相互配置」(およびそのファイル名パラメーター)を含むパーツヘッダーにも使用されます(相互に排他的な)setMultipartCharset(java.nio.charset.Charset)
も設定されていない場合、パーツヘッダーは ASCII としてエンコードされ、 ファイル名は「エンコードされた RFC 2047 の -word " 構文。
デフォルトでは、これは "UTF-8" に設定されています。
public void setMultipartCharset(CharsetSE charset)
MimeUtility
に依存しています。5.0 以降、デフォルトでは、Content-Disposition(およびそのファイル名パラメーター)を含むパーツヘッダーは、デフォルトで setCharset(Charset)
または UTF-8
の設定に基づいてエンコードされます。
public boolean canRead(ClassSE<?> clazz, @Nullable MediaType mediaType)
HttpMessageConverter
HttpMessageConverter<MultiValueMap<StringSE,?>>
の canRead
clazz
- 読み込み可能性をテストするクラス mediaType
- 読み取るメディア型(指定しない場合は null
にできます); 通常、Content-Type
ヘッダーの値。true
。それ以外の場合は false
public boolean canWrite(ClassSE<?> clazz, @Nullable MediaType mediaType)
HttpMessageConverter
HttpMessageConverter<MultiValueMap<StringSE,?>>
の canWrite
clazz
- 書き込み可能性をテストするクラス mediaType
- 書き込むメディア型(指定しない場合は null
にすることができます); 通常、Accept
ヘッダーの値。true
。それ以外の場合は false
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
- 変換エラーの場合 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
- 変換エラーの場合 protected StringSE serializeForm(MultiValueMap<StringSE,ObjectSE> formData, CharsetSE charset)
protected byte[] generateMultipartBoundary()
この実装は MimeTypeUtils.generateMultipartBoundary()
に委譲します。
protected HttpEntity<?> getHttpEntity(ObjectSE part)
HttpEntity
を返します。part
- HttpEntity
を返す部分 HttpEntity
、またはそのパーツ用に新しく構築された HttpEntity
ラッパー @Nullable protected StringSE getFilename(ObjectSE part)
Content-Disposition
ヘッダーに使用されます。 デフォルトの実装は、パーツが Resource
の場合は Resource.getFilename()
を返し、それ以外の場合は null
を返します。サブクラスでオーバーライドできます。
part
- ファイル名を決定する部分 null