2013-12-11 4 views
1

Я успешно разместить файл на том же веб-службы, используя следующие:Как я делаю эквивалент этой команды curl, используя SpringTemplate Spring?

curl -X POST http://<someUrl> -F "[email protected]/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); 

Где картографа является экземпляром ObjectMapper Джексона (v1.9.6) и FileUtils от Common Apache.

Служба REST требует, чтобы тип содержимого являлся многочастным/форматированным, поэтому я попытался написать Java-объект как строку JSON во временный файл, а затем опубликовать временный файл. К сожалению, я получаю ошибку внутреннего сервера HTTP 500.

Что я делаю неправильно? Любые предложения относительно того, как это сделать?

+0

500 - это ошибка на стороне сервера. Вам нужно будет проверить свой сервер на наличие журналов. –

+0

Я понимаю, что это ошибка на стороне сервера. Это внешняя служба, к которой я не контролирую и не имею доступа. Я надеялся, что кто-то сможет помочь «преобразовать» мою успешную команду curl в эквивалент, используя RestTemplate. – wxkevin

ответ

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); 
Смежные вопросы