sitelink1 | https://okky.kr/article/389868 |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars6 |
RestTemplate 에서 Form 을 POST로 전송할 경우, AllEncompassingFormHttpMessageConverter 를 사용합니다.
AllEncompassingFormHttpMessageConverter 는 FormHttpMessageConverter 를 상속받고 있으며, 내부적으로 ByteArrayHttpMessageConverter, StringHttpMessageConverter, ResourceHttpMessageConverter 를 partConverters로 가지고 있습니다.
이중 StringHttpMessageConverter 가 디폴트 캐릭터셋이 ISO-8859-1라 UTF-8로 변경이 필요합니다.
RestTemplate 설정시에 아래와 같이 해보세요.
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
for(HttpMessageConverter<?> messageConverter : restTemplate.getMessageConverters()) {
if(messageConverter instanceof AllEncompassingFormHttpMessageConverter) {
((AllEncompassingFormHttpMessageConverter) messageConverter).setCharset(Charset.forName("UTF-8"));
((AllEncompassingFormHttpMessageConverter) messageConverter).setMultipartCharset(Charset.forName("UTF-8"));
}
}
return restTemplate;
}
또한 FormHttpMessageConverter 에서 헤더에 filename을 설정할 때, javax.mail.internet.MimeUtility.encodeWord() 를 이용해서 파일명을 인코딩합니다. 따라서 REST api 쪽에서도 파일명을 디코딩 처리해줘야 합니다.
MimeUtility.decodeText(multipartFile.getOriginalFilename());