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

 

 

번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 581
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 573
38 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 127
37 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 114
36 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 100
35 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 253
» [Spring3.1.1][4] RestTemplate 한글 문제 황제낙엽 2018.08.08 191
33 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 386
32 [Spring3.1.1][2] RestTemplate 한글 문제 황제낙엽 2018.08.08 209
31 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 864
30 NamedParameterJdbcDaoSupport 몇가지 장점 황제낙엽 2007.11.27 195
29 Spring AOP - Pointcut 황제낙엽 2007.10.02 233
28 <spring:checkbox> tip! 황제낙엽 2007.10.01 510
27 스프링 2와 JPA 시작하기 (한글) 황제낙엽 2007.08.27 260
26 Spring 2.0의 XML확장기능 (3) 황제낙엽 2007.08.15 133
25 Spring 2.0의 XML확장기능 (2) 황제낙엽 2007.08.15 151
24 Spring 2.0의 XML확장기능 (1) 황제낙엽 2007.08.15 137
23 스프링의 구조별 기능 설명 황제낙엽 2007.06.26 151
22 자바지기 스프링 프레임웍 아티클 황제낙엽 2007.06.04 151
21 AOP(Aspect Oriented Programming) 황제낙엽 2007.06.03 132
20 Spring MVC 어플리케이션 개발 <12> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 132