我如何使用Spring的RestTemplate执行相当于此curl命令的操作?

时间:2013-12-11 19:00:59

标签: java json spring curl resttemplate

我使用以下内容将文件成功发布到同一个Web服务:

curl -X POST http://<someUrl> -F "file=@/path/to/aFile.txt"

现在我尝试使用Spring的RestTemplate执行相同类型的操作,但需要发送一个Java对象。这是我尝试过的一个例子:

File file = File.createTempFile("aaa","bbb");
FileUtils.writeStringToFile(file, mapper.writeValueAsString(message), "UTF-8");

MultiValueMap<String, Object> values = new LinkedMultiValueMap<String, Object>();
values.add("file", new FileSystemResource(file));

restTemplate.postForObject(URL, values, String.class);

其中mapper是Jackson的ObjectMapper(v1.9.6)的实例,而FileUtils来自Apache的Common。

REST服务要求内容类型为multipart / form-data,因此我尝试将Java Object作为JSON字符串写入临时文件,然后发布临时文件。不幸的是我收到HTTP 500内部服务器错误。

我做错了什么?有关如何做到这一点的任何建议吗?

1 个答案:

答案 0 :(得分:1)

看起来我解决了它。以下是我的参考资料:

File file = File.createTempFile("aaa","bbb");
FileUtils.writeStringToFile(file, mapper.writeValueAsString(message), "UTF-8");

MultiValueMap<String, Object> values = new LinkedMultiValueMap<String, Object>();
values.add("name", file.getAbsolutePath());
values.add("filename", file.getAbsolutePath());
values.add("file", new FileSystemResource(file));

restTemplate.postForObject(URL, values, String.class);