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); 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 4422
65 Spring Security OAuth 황제낙엽 2019.09.05 2341
64 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 2199
» [Spring3.1.1][4] RestTemplate 한글 문제 황제낙엽 2018.08.08 2054
62 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 2203
61 [Spring3.1.1][2] RestTemplate 한글 문제 황제낙엽 2018.08.08 1891
60 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 2712
59 [Spring3.1.1] Eclipse 에 Spring Framework 환경 구축하기 file 황제낙엽 2018.08.08 1962
58 웹 개발의 변화와 스프링 황제낙엽 2008.03.19 1701
57 Spring MVC 가 아닌 환경에서 Spring Pojo Bean 사용하기 (Pure Java App 또는 Servlet App) 황제낙엽 2009.10.22 1933
56 NamedParameterJdbcDaoSupport 몇가지 장점 황제낙엽 2007.11.27 1651
55 프로젝트의 기본이 되는 Logging, Exception 처리 전략 황제낙엽 2007.01.30 1511
54 Spring AOP - Pointcut 황제낙엽 2007.10.02 1682
53 <spring:checkbox> tip! 황제낙엽 2007.10.01 2114
52 SimpleFormController 정리 황제낙엽 2007.09.19 1728
51 Spring의 Exception 황제낙엽 2007.09.17 1336
50 스프링 2와 JPA 시작하기 (한글) 황제낙엽 2007.08.27 1558
49 스프링 개발팁 황제낙엽 2007.08.17 1847
48 유효성체크 (org.springframework.validation.Validator) 황제낙엽 2007.08.17 1749
47 Spring 2.0의 XML확장기능 (3) 황제낙엽 2007.08.15 1623
46 Spring 2.0의 XML확장기능 (2) 황제낙엽 2007.08.15 1712