728x90
반응형
Spring 한글깨짐
Encoding UTF-8
fetch, ajax
해결방법
현상
- fetch로 Spring 컨트롤러를 호출해서 Json 데이터를 받는데, 한글이 깨지는 현상이 발생했다.
fetch('/yourusernames/api', {
method: 'POST',
headers: { 'Content-Type': 'application/json;charset=utf-8' },
body: JSON.stringify(this.formData)
})
.then(function (response) {
return response.json();
})
.then(function (data) {
console.log(data);
})
.catch(function (err) {
console.log(err);
})
- 응답헤더(Response Headers)에 캐릭터셋이 ISO-8859-1 로 되어있다.
- 응답(Response) 데이터는 한글이 다 깨져서 나온다
해결
- 일단 내가 처리결 해결 방법은 @requestMapping (@GetMapping, @PostMapping) 어노테이션에 produces 옵션을 추가하고 값을 "application/json; charset=utf-8" 로 주니 해결되었다.
produces
produces는 응답할 데이터 포맷을 지정하는 옵션.
- 컨트롤러에서 @PostMapping에 produces 추가
@PostMapping(value = "/yourusername/api", produces = "application/json; charset=utf-8")
@ResponseBody
public String yourusername(@RequestBody HashMap<String, Object> formData, HttpServletRequest req, HttpServletResponse res) {
...
}
다른방법
- 확인 1 ) 프로젝트 Properties > Resource 에 Text file encoding이 UTF-8로 되어있는지 확인
- 확인 2 ) Preferences 팝업에서 General > Workspace에 text file Encoding이 UTF-8로 되어있는지 확인
- 확인 3 ) 서버가 톰켓일 경우 server.xml 을 열어 보면 Connector 항목이 있는데 URIEncoding=UTF-8설정이 되어있는지 확인.
- 방법 1 ) return 하기전에 HttpServletResponse에 setContentType로 인코딩을 셋팅해준다.
response.setContentType("application/json;charset=UTF-8");
- 방법 2 ) 뭐 이렇게 해보란 사람도있..
fetch('yourusername/api', myHeaders).then(function (response) {
return response.arrayBuffer();
}).then(function (buffer) {
const decoder = new TextDecoder('iso-8859-1'); //utf-8로도 바꿔보고.., euc-kr로도 바꿔보고..
const text = decoder.decode(buffer);
console.log(text);
});
728x90
반응형