【发布时间】:2012-12-17 16:56:25
【问题描述】:
我想编写一个 REST 服务,它响应一个 zipFile 和一些 json 数据,所有内容都在一个多部分/混合请求中。
服务器部分工作正常,我正在使用 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 发送多部分。
现在我尝试使用多部分/混合响应并返回 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:无法提取 响应:没有找到适合响应类型的 HttpMessageConverter [class org.jlot.client.remote.MyMultiValueMap] 和内容类型 [多部分/表单数据;边界=Rjh-fkdsI9OIyPpYwdFY7lsUIewhRSX8kE19I;字符集=UTF-8] 在 org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:107) 在 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:492)
FormHttpMessageConverter 的 Javadoc 说它可以写入但不能读取 multipart/form-data。
为什么会这样?
有没有办法使用开箱即用的 RestTemplate 读取多部分/表单数据,还是我需要编写一个 HttpMessageConverter?
【问题讨论】:
-
您的问题得到答案了吗?以下答案对我不起作用
标签: spring spring-mvc resttemplate multipartform-data