我希望编写一个REST服务,它可以在一个multipart/mixed请求中同时响应zip文件和JSON数据。
服务器端部分已经正常运行,并使用来自Firefox的REST客户端进行测试。我的服务器会发送一个类似以下格式的multipart响应:
我的 MyMultiValueMap 存在是为了防止类型擦除(泛型)。
这会导致以下异常:
为什么会这样?
有没有一种方法可以使用 RestTemplate out-of-the-box 读取 multipart/form-data,还是我需要编写一个 HttpMessageConverter?
服务器端部分已经正常运行,并使用来自Firefox的REST客户端进行测试。我的服务器会发送一个类似以下格式的multipart响应:
--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 存在是为了防止类型擦除(泛型)。
这会导致以下异常:
FormHttpMessageConverter 的 Javadoc 表明它可以写入但不能读取 multipart/form-data。org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class org.jlot.client.remote.MyMultiValueMap] and content type [multipart/form-data;boundary=Rjh-fkdsI9OIyPpYwdFY7lsUIewhRSX8kE19I;charset=UTF-8] at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:107) at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:492)
为什么会这样?
有没有一种方法可以使用 RestTemplate out-of-the-box 读取 multipart/form-data,还是我需要编写一个 HttpMessageConverter?