티스토리 뷰

안녕하세요. 오늘은 스프링 프로젝트에서 ajax를 사용해서 json 또는 gson으로 데이터를 가져와서 화면에서 데이터를 

출력해 줄때 한글로 된 데이터가 '?'와 같이 출력되면서 한글이 깨지는 현상이 있습니다. 

이와 같은 현상이 발생했을때 해결 방안에 대해서 포스팅 하도록 하겠습니다.

(전제 조건 : 스프링 프레임워크 3.1 이상 버전 사용, 그 이하 버전에서는 다른 방법으로 해결해야됩니다.)


우선, ajax를 통해서 데이터를 가져오는 코드를 보겠습니다.

/**
* gson 샘플 코드
*/
@RequestMapping(value="/sample")
@ResponseBody
public String sample(HttpServletRequest request, HttpServletResponse response) throws Exception {
	List sampleList = sampleService.getSampleList();
		
	Gson gson = new Gson(); // Gson 사용
	return gson.toJson(sampleList); // json으로 변환 후, 리턴
}


이렇게 사용해서 데이터를 화면상으로 가져오게 되면 한글 데이터들이 '?' 와 같이 나타나게 됩니다. 

이러한 증상의 해결방안으로는 다음과 같이 코드 위에 있는 @RequestMapping 어노테이션의 속성 중 produces라는 것을 사용하면 됩니다.

다음과 같이 GET 방식과 POST 방식의 예시를 들어 보겠습니다.


<get 방식>

/**
* gson 샘플 코드
*/
@RequestMapping(value="/sample", method=RequestMethod.GET, produces="text/plain;charset=UTF-8")
@ResponseBody
public String sample(HttpServletRequest request, HttpServletResponse response) throws Exception {
	List sampleList = sampleService.getSampleList();
		
	Gson gson = new Gson(); // Gson 사용
	return gson.toJson(sampleList); // json으로 변환 후, 리턴
}


<post 방식>

/**
* gson 샘플 코드
*/
@RequestMapping(value="/sample", method=RequestMethod.POST, produces="text/plain;charset=UTF-8")
@ResponseBody
public String sample(HttpServletRequest request, HttpServletResponse response) throws Exception {
	List sampleList = sampleService.getSampleList();
		
	Gson gson = new Gson(); // Gson 사용
	return gson.toJson(sampleList); // json으로 변환 후, 리턴
}


(예제 코드상의 </sample> 이라는 글자는 무시하셔도 됩니다... 지워지지가 않네요)

위의 예시에서와 같이 produces="text/plain;charset=UTF-8"를 사용하여 응답 페이지에 대한 UTF-8 인코딩이 가능하여 한글 깨짐을 방지 할 수 있습니다.


이로써 gson 및 json 사용시 한글깨짐 현상 해결방법에 대해서 알아보았고, 포스팅으로 이걸로 마치도록 하겠습니다. :0