私は zipFile といくつかの json データで応答する REST サービスを書きたいと思っています。
サーバー部分は正常に動作し、Firefox の REST クライアントでテストしています。私のサーバーはこのようなマルチパートを送信します
--k-dXaXvCFusLVXUsg-ryiHMmkdttadgcBqi4XH
Content-Disposition: form-data; name="form"
Content-type: application/json
{"projectName":"test","signal":"true"}
--k-dXaXvCFusLVXUsg-ryiHMmkdttadgcBqi4XH
Content-Disposition: form-data; name="file2"; filename="file2.txt"
Content-type: application/octet-stream
Content-Length: 10
hallo=Welt
RestTemplate は、そのままで MultiValueMap を使用してマルチパートを送信できることを知っています。
今、私は multipart/mixed レスポンスを消費して MultiValueMap を返そうとしました
@Component
public class RestCommand
extends AbstractLoginRestCommand<Form, MultiValueMap<String, Object>>
{
@Override
protected MultiValueMap<String, Object> executeInternal ( Form form )
{
RestTemplate restTemplate = getRestTemplate();
MyMultiValueMap map = restTemplate.postForObject(getUrl(), form, MyMultiValueMap.class);
return new LinkedMultiValueMap<String, Object>(map);
}
}
class MyMultiValueMap extends LinkedMultiValueMap<String, Object>
{}
MyMultiValueMap は、型の消去 (ジェネリック) を防ぐために存在します。
これは与える
org.springframework.web.client.RestClientException: 応答を抽出できませんでした: 応答タイプ [class org.jlot.client.remote.MyMultiValueMap] およびコンテンツ タイプ [multipart/form-data;boundary=Rjh-fkdsI9OIyPpYwdFY7lsUIewhRSX8kE19I; に適した HttpMessageConverter が見つかりませんでした。 charset=UTF-8] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:107) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:492)
FormHttpMessageConverter の Javadoc には、書き込みはできるが multipart/form-data の読み取りはできないと書かれています。
なぜこのようになっているのですか?
そのまま使用できる RestTemplate を使用して multipart/form-data を読み取る方法はありますか、それとも HttpMessageConverter を記述する必要がありますか?