JS에서 값을 받으려 했더니…
SpringBoot를 사용하여 JS에서 Json으로 서버측에 데이터를 보냈더니 아래와 같은 에러가 발생하였습니다.
Could not read JSON: Can not deserialize instance of hello.Country[] out of START_OBJECT token
사실 제 로그는 아니고 검색해서 나온 로그입니다… (저장 해두는 것을 깜빡하여…)
저의 경우 이 문제가 일어난 케이스는 제가 개발 중인 사내정보시스템 기능 중 하나인 회의록 저장 기능이었습니다.
먼저 JS 단에서 전송하는 데이터는 아래와 같습니다.
1 | jsonObj = {"meetingType":$('#meetTypeSelector').val(), "startDate":$('#startDate').val(), |
저기 데이터 중에 member라는 값은 Select2의 값인데 이게 문제였습니다.
위의 값을 받는 데이터 중에 DTO를 사용하는데 아래와 같습니다.
1 |
|
위 코드는 일부 코드이며, 참고용입니다.
주석은 제가 수정한 것이고, 기존에는 String을 사용하였는데 이 부분이 문제였습니다.
JS에서 보낸 member의 경우 String으로 오는줄 착각을 하고 있었는데, log를 찍어서 보니…배열로 오고 있었습니다.
그래서 이 부분을 String -> List
결론
위 문제가 발생한 경우에는 다음 부분을 확인해 보시기 바랍니다.
1. JS의 Json 전달 부분의 데이터가 배열인지 일반 문자열인지 확인할 것.
2. Back-end 부분에서 Json을 받는 부분인 DTO(또는 매핑 객체)의 값의 자료형을 확인해 볼것