개발/Spring

Springframework, Ajax에서 한글이 물음표로 나오는 현상

신매력 2015. 4. 3. 15:57

Ajax로 호출한 다음, 결과값을 alert으로 한글을 띄우려는데

자꾸 ???? ???? 로 나오는 것이었다.

 

 

서버 코드

@RequestMapping(value = "/add")
public @ResponseBody String add() {
	return "성공했음";
}

 

javascript 코드

$.ajax({
	url : '/add'
	, success : function(data) {
		alert(data);
	}
});

 

얼럿 결과: ????????

 

 

 

구글신을 통해 여러가지 방법을 시도해봤다.

 

1) jsp상단에 추가

<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>

 

이래도 안됨

 

 

2) ajax 코드에 추가하고

contentType: "application/x-www-form-urlencoded; charset=UTF-8",

 

서버에서 스트링을 UTF-8로 디코딩함

 

이래도 안됨

 

 

3) applicationContext.xml에 메시지컨버팅에 옵션을 넣음

<bean class="org.springframework.http.converter.StringHttpMessageConverter" >

    <property name="supportedMediaTypes">

               <list>

                   <value>text/html;charset=UTF-8</value>

               </list>

       </property>

 </bean>

 

 

이래도 안됨 

 

 

4) 서버에서 

String message = new String(message.getBytes("ISO-8859-1"), "UTF-8");

 

캐릭터 인코딩함

 

 

이래도 안됨

 

 

 

 

서버코드 안에서 찍어보면 분명 한글이 보이는데 얼럿만 띄우면 물음표다.;;

 

4번을 적용해보고 모든걸 다 적용해본 결과

마지막에 메시지컨버터에서 결국 ISO-8859-1 charset으로 덮어써버리는 것이었다.

 

 

최종적인 해결 방법!!!

 

@RequestMapping(value = "/add", produces = "application/text; charset=utf8")
public @ResponseBody String add() {
	return "성공했음";
}

produces = "application/text; charset=utf8"

 

@ResponseBody를 통해 내릴 때 명시적으로 produces를 사용해서 utf-8로 인코딩을 해주면

드디어 UTF-8로 인코딩 된 값이 내려간다~!!

json을 내리는 경우라면 application/json; 으로.