[Gson]MalformedJsonException 에러해결

💡 핵심 요약 (TL;DR)

백단 테스트 중 json을 받을 일이 있어서 그냥 작성했더니 아래와 같은 오류가 발생했다. jsp코드와 컨트롤러 코드를 수정했다.

백단 테스트 중 json을 받을 일이 있어서 그냥 작성했더니 아래와 같은 오류가 발생했다.

문제

  • jsp코드
1
2
3
4
5
6
7
8
9
10
11
12
let param = {};
param.userid = 'testuser';
param.json = '{\"title\":\"테스트제목\", \"detail\":\"테스트1의 설명입니다.\"}';

$.ajax({
url: "/test/json",
method: "POST",
data: param,
callback: function(data){
alert(JSON.stringify(data));
}
})
  • testVO코드
1
2
3
4
5
@Data
public class TestVO {
private String title;
private String detail;
}
  • 컨트롤러코드
1
2
3
4
5
6
7
8
@RequestMapping(value="/test/json", method= RequestMethod.POST)
@ResponseBody
public TestVO testControl(@ResquestParam HashMap<String, String> param) throws Exception{
TestVO test = new TestVO();
test = new Gson().fromJson(param.get("json"), TestVO.class);

return test;
}
  • 에러메시지
1
com.google.gson.stream.MalformedJsonException: Expected ':' at line 1 column 8 path $.&quot

언제나 에러메시지 안에 답이 있다.

해결1: 공백, 특수문자 제거

com.google.gson.stream.MalformedJsonException - juno.log을 참고하면 특수문자를 제거하는 방법이 있다.
내 상황에선 json형태가 깨지기에 사용할 수 없었다.

해결2: setter 사용

jsp코드와 컨트롤러 코드를 수정했다.

  • jsp코드
1
2
3
4
5
6
7
8
9
10
11
12
13
let param = {};
param.userid = "testuser";
param.title = "테스트제목";
param.detail = "테스트1의 설명입니다";

$.ajax({
url: "/test/json",
method: "POST",
data: param,
callback: function(data){
alert(JSON.stringify(data));
}
})
  • 컨트롤러코드
1
2
3
4
5
6
7
8
9
@RequestMapping(value="/test/json", method= RequestMethod.POST)
@ResponseBody
public TestVO testControl(@ResquestParam HashMap<String, String> param) throws Exception{
TestVO test = new TestVO();
test.setTitle(param.get("title"));
test.setDetail(param.get("detail"));

return test;
}

그냥 받았다… 더 좋은 방법이 있다면 댓글로 알려주시면 감사하겠습니다.

#Gson

Author

sowon-dev

Posted on

2023-03-02

Updated on

2026-10-21

Licensed under

CC BY 4.0

댓글