📜
Spring에서 Js에서 데이터 받을 때 START_OBJECT token 에러 문제
2018.04.26
주의
이 문건은 과거 Hexo 블로그 (2018-04-26) 에서 이동된 문서입니다.
시간이 지남에 따라 최신 기술과 다를 수 있으니 주의 바랍니다.
JS에서 값을 받으려 했더니…
SpringBoot를 사용하여 JS에서 Json으로 서버측에 데이터를 보냈더니 아래와 같은 에러가 발생하였습니다.
Could not read JSON: Can not deserialize instance of hello.Country[] out of START_OBJECT token
사실 제 로그는 아니고 검색해서 나온 로그입니다… (저장 해두는 것을 깜빡하여…)
저의 경우 이 문제가 일어난 케이스는 제가 개발 중인 사내정보시스템 기능 중 하나인 회의록 저장 기능이었습니다.
먼저 JS 단에서 전송하는 데이터는 아래와 같습니다.
jsonObj = {
meetingType: $('#meetTypeSelector').val(),
startDate: $('#startDate').val(),
member: $('#userSelector').val(),
};
jsonObj.boardDTO = {
title: $('#title').val(),
content: CKEDITOR.instances.editor1.getData(),
};
저기 데이터 중에 member라는 값은 Select2의 값인데 이게 문제였습니다.
위의 값을 받는 데이터 중에 DTO를 사용하는데 아래와 같습니다.
@Getter
@Setter
@Accessors(chain = true)
public class MeetingLogDTO {
private DefaultBoardDTO boardDTO;
private MeetingLogType meetingType;
private String startDate;
private String member; //문제코드
//private List<String> member; //수정코드 (정상 동작)
}
위 코드는 일부 코드이며, 참고용입니다.
주석은 제가 수정한 것이고, 기존에는 String을 사용하였는데 이 부분이 문제였습니다.
JS에서 보낸 member의 경우 String으로 오는줄 착각을 하고 있었는데, log를 찍어서 보니…배열로 오고 있었습니다.
그래서 이 부분을 String -> List
결론
위 문제가 발생한 경우에는 다음 부분을 확인해 보시기 바랍니다.
1. JS의 Json 전달 부분의 데이터가 배열인지 일반 문자열인지 확인할 것.
2. Back-end 부분에서 Json을 받는 부분인 DTO(또는 매핑 객체)의 값의 자료형을 확인해 볼것
작은 개인광고 양해 바랍니다 ^^;;
👇 주인장이 직접 만든 서비스 👇
Dart
Flutter
hive
provider
마와셀(엡) - 와인과 셀러 관리, 시음노트
보유한 와인의 관리, 시음노트 작성, 보유 와인 셀러의 관리 어플리케이션