Framework/Spring

[ERROR]Ajax 사용 및 json 데이터 한글 깨짐 현상

  • -
반응형

Ajax를 이용해 json 데이터를 파싱할 때 간혹 한글이 깨지는 현상을 겪곤했습니다.

그 때마다 구글링해서 해결했었는데 이번 기회에 정리를 해놓으려고 합니다.


문제가 발생한 구간은 Ajax로 서버 호출, 데이터를 json 타입으로 받은 후 출력하는 부분.

(아래와 같이 한글이 물음표(?)가 되어 출력되었다)

 

jsp 상단에는 캐릭터셋과 인코딩 타입을 UTF-8로 맞춰놓은 상태였고, ajax의 contentType 속성에도 캐릭터셋을 UTF-8로 맞춰놓았다.

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

 

jsp

var getCompany = function() {
	var eventData = {           
            cduser  : "0001"           
    };  
	
    $.ajax({        	
        type: "POST",            
        url: "/board/getCompany.ajax",
        cache: false,  
        dataType: "json",
        data: JSON.stringify(eventData),            
        contentType: "application/json; charset=utf-8",
        success: function(data) {
            var resultList = data;
            
            for(var i = 0; i < resultList.length; i++){
            	alert(resultList[i].cmpCode + "/" + resultList[i].cmpName);
            }
            
        },	
		error : function(request, status, error) {
			alert(request.status + "," + request.responseText + ", " + error);
		}
    });     
}

 

Controller.java

	@RequestMapping(value= "/board/getCompany.ajax", method = RequestMethod.POST)
	public @ResponseBody String getCompany(@RequestBody String filterJSON, HttpServletRequest request) {	
		JSONObject result = new JSONObject(); 			
		JSONObject json = (JSONObject) JSONValue.parse(filterJSON);
		JSONArray jsonArray = new JSONArray();
				
		String cduser = String.valueOf(json.get("cduser"));			
		
		List<BoardVO> resultList = boardService.getCdcmp(cduser);				
				
		for(int i = 0; i < resultList.size(); i++) {
			BoardVO boardVO = resultList.get(i);
			result = new JSONObject(); 		
			
			result.put("cmpCode", boardVO.getCmpcode());		
			result.put("cmpName", boardVO.getCmpname());
			
			jsonArray.add(result);
		}		
		
		return jsonArray.toJSONString();
	}

 

해결은 간단하다.

@RequestMapping의 produces 속성을 사용해 UTF-8 인코딩을 해서 다시 클라이언트로 내보내주면 한글이 정상적으로 나오게 된다.

@RequestMapping(value= "/board/getCompany.ajax", method = RequestMethod.POST, produces = "application/text; charset=UTF-8")
public @ResponseBody String getCompany(@RequestBody String filterJSON, HttpServletRequest request) {	
		JSONObject result = new JSONObject(); 			
		JSONObject json = (JSONObject) JSONValue.parse(filterJSON);
		JSONArray jsonArray = new JSONArray();
				
		String cduser = String.valueOf(json.get("cduser"));			
		
		List<BoardVO> resultList = boardService.getCdcmp(cduser);				
				
		for(int i = 0; i < resultList.size(); i++) {
			BoardVO boardVO = resultList.get(i);
			result = new JSONObject(); 		
			
			result.put("cmpCode", boardVO.getCmpcode());		
			result.put("cmpName", boardVO.getCmpname());
			
			jsonArray.add(result);
		}		
		
        return jsonArray.toJSONString();
}

 

 

 

 

+++++++

 

[Window - Preferences - General - Workspace] 경로에 Text file encoding이 UTF-8로 되어있지 않은 경우 한글이 깨지기도 했다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.