带有重音的Spring RestTemplate文件名

时间:2016-12-18 20:47:44

标签: java spring spring-mvc resttemplate

使用Spring RestTemplate上传文件时遇到问题。如果文件包含带重音的字符,则原始文件名未正确编码,并且未通过线路正确发送。带有重音的字符在服务器上显示问号。

如果我使用Postman或Advanced Rest Client,它可以使用。当使用wireshark嗅探时,我可以看到两个工具对文件名进行不同的编码。有人知道如何正确地使用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);

2 个答案:

答案 0 :(得分:1)

您需要向js

添加UTF-8消息转换器
RestTemplate

另请参阅:How can I tell RestTemplate to POST with UTF-8 encoding?

答案 1 :(得分:0)

使用设置为UTF-8的属性RestTemplate的自定义FormHttpMessageConverter实例配置您的multipartCharset

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