sitelink1 http://messenger.tistory.com/entry/Sprin...9%EB%B2%95 
sitelink2  
sitelink3  
extra_vars6  

UTF-8 한글 JSON 데이터를 RestTemplate을 이용하여 '홍길동' 같이 한글을 전송하면 '???'으로 받아지는 경우가 있다.

 

문제의 코드

 

<API사용 Client>

 

import org.springframework.web.client.RestTemplate;

import org.springframework.web.util.UriComponentsBuilder;

...

RestTemplate rest = new RestTemplate();

MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();

parts.add("name", "홍길동);

parts.add("email", "hong@yourdomain");

String url = UriComponentsBuilder.fromHttpUrl("http://yourdomain").pathSegment("add").build().toString();

String response = rest.postForObject(url, parts, String.class); 

 

 

 

<서버 코드>

@RequestMapping(method = RequestMethod.POST, value="/add", produces = "application/json")

@ResponseBody Result add(

MultipartHttpServletRequest request,

@RequestParam("name") String name,

@RequestParam("email") String email

) throws IOException {

    // name의 '홍길동'이 '???'으로 받아진다

}

 

 

원인은 RestTemplate에서 내부적으로 StirngHttpMessageConverter를 사용해서 데이터를 변환하는데

이때 사용하는 인코딩이 'ISO-8859-1'이기 때문이다. (무조건)

그래서 Client코드에서 아래와 같이 'UTF-8'으로 지정해주면 간단하게 해결된다.

 

<변경된 API사용 Client>

import org.springframework.web.client.RestTemplate;

import org.springframework.web.util.UriComponentsBuilder;

...

RestTemplate rest = new RestTemplate();

MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();

HttpHeaders headers = new HttpHeaders();

headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));

HttpEntity<String> name = new HttpEntity<>("홍길동", headers);

parts.add("name", name);

parts.add("email", "hong@yourdomain");

String url = UriComponentsBuilder.fromHttpUrl("http://yourdomain").pathSegment("add").build().toString();

String response = rest.postForObject(url, parts, String.class); 

 

 

번호 제목 글쓴이 날짜 조회 수
77 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 1233
76 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 1301
75 Spring MVC configuration file 황제낙엽 2024.01.17 1243
74 [스프링 시큐리티 OAuth2] 강의 자료와 학습용 소스 file 황제낙엽 2024.01.15 1042
73 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 1132
72 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 1147
71 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 1220
70 spring-security-samples 황제낙엽 2023.12.22 1161
69 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 1146
68 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 1467
67 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 1289
66 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 1570
65 Spring Security OAuth 황제낙엽 2019.09.05 1647
64 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 1399
» [Spring3.1.1][4] RestTemplate 한글 문제 황제낙엽 2018.08.08 1234
62 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 1532
61 [Spring3.1.1][2] RestTemplate 한글 문제 황제낙엽 2018.08.08 1209
60 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 1921
59 [Spring3.1.1] Eclipse 에 Spring Framework 환경 구축하기 file 황제낙엽 2018.08.08 1195
58 웹 개발의 변화와 스프링 황제낙엽 2008.03.19 1168