2016-12-18 5 views
0

У меня проблема с загрузкой файла с помощью Spring RestTemplate. Если файл содержит символы с акцентом, исходное имя файла неправильно закодировано и не отправляется по кабелю правильно. Символы с акцентом отображаются с вопросительным знаком на сервере.Spring RestTemplate имя файла с акцентами

Если я использую Postman или Advanced Rest Client, он работает. При обнюхивании с использованием wirehark я вижу, что оба инструмента кодируют имя файла по-разному. Кто-нибудь получил представление о том, как сделать RestTemplate правильно обрабатывать акценты в именах файлов?

Ниже приведен код, который я использую для вызова конечной точки webservice.

final String fileName = "Sécurité report.pdf"; 
final LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); 
map.add("file", new ClassPathResource(fileName)); 
final HttpHeaders headers = new HttpHeaders(); 
headers.setContentType(MediaType.MULTIPART_FORM_DATA); 

final HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(map, headers); 

final RestTemplate restTemplate = new RestTemplate(); 
final ResponseEntity<String> result = restTemplate.exchange("http://localhost:8080", HttpMethod.POST, requestEntity, String.class); 

ответ

0

Вы должны добавить сообщение конвертер UTF-8 в RestTemplate

RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters() 
    .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); 

Смотрите также: How can I tell RestTemplate to POST with UTF-8 encoding?

+0

Я пробовал это, но безуспешно. Это никак не влияет на имя файла. – Tammeuh

0

Настройка RestTemplate персонализированных FormHttpMessageConverter экземпляр со свойством multipartCharset набора в UTF-8 ,

FormHttpMessageConverter converter = new FormHttpMessageConverter(); 
converter.setMultipartCharset(Charset.forName("UTF-8")); 
+0

Я вижу эффект, но результат еще не ожидался. Исходное поле имени файла на сервере теперь содержит: =? UTF-8? Q? S = C3 = A9curit = C3 = A9_report.pdf? = Почтальон может отправить имя файла, и он просто появляется снова с другой стороны. – Tammeuh

+0

Если я удалю фильтр, это то, что я получаю. S? Curit? report.pdf – Tammeuh

+0

Неправильная конфигурация на моем конце. В новом проекте это работает. Мне кажется странным, что Spring использует эту стратегию для кодирования контента ISO-8859-1. Я бы ожидал, что он будет принят как есть. Некоторые RFC упоминают ASCII как требуемую кодировку для заголовка имени файла в мультипартике, другие упоминают ISO-8859-1. В любом случае, так оно и работает. Остается только вопрос, насколько переносимым является это решение? – Tammeuh

 Смежные вопросы

  • Нет связанных вопросов^_^