[Gson]MalformedJsonException 에러해결
백단 테스트 중 json을 받을 일이 있어서 그냥 작성했더니 아래와 같은 오류가 발생했다.
문제
jsp코드
1
2
3
4
5
6
7
8
9
10
11
12let 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
public class TestVO {
private String title;
private String detail;
}컨트롤러코드
1
2
3
4
5
6
7
8"/test/json", method= RequestMethod.POST) (value=
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 $."
언제나 에러메시지 안에 답이 있다.
해결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
13let 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 | "/test/json", method= RequestMethod.POST) (value= |
그냥 받았다… 더 좋은 방법이 있다면 댓글로 알려주시면 감사하겠습니다.