에러 내용
프론트에서 POST 방식으로 서버에 JSON 데이터를 전송했을 때, 아래와 같은 에러 메시지가 발생했다.
was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')”
에러 파악
이 에러는 서버가 JSON 데이터를 받겠다고 선언해 뒀지만, 실제로는 비어 있거나 형식이 잘못된 본문(body)이 들어왔을 때 발생한다. 주로 아래와 같은 상황에서 발생할 수 있다.
1. 요청 본문이 비어 있음
서버 측 컨트롤러가 @RequestBody로 JSON 데이터를 받게 되어 있을 때, 요청 본문이 비어 있으면 json 파서가 파싱 할 수 없어서 위 에러가 발생한다.
2. 본문이 JSON 형식이 아님
Content-Type은 application/json으로 설정했지만, 본문 내용이 JSON 포맷이 아닐 경우 에러가 발생한다.
- 예시
- 문자열에 따옴표가 빠진 경우
- JSON 문법에 맞지 않는 주석이 포함된 경우
- form-urlencoded 형식 데이터가 JSON으로 잘못 전송된 경우 등이 있다.
해결 방법
본문에 올바른 JSON 데이터를 담아보내면 된다..
아래와 같은 상황에서도 해당 에러가 발생할 수 있다.
- 버는 객체 하나를 기대하는데, 프론트에서 배열(JSON array)을 전달한 경우
- 본문이 빈 문자열 ""일 경우
- API Gateway 또는 프록시가 요청 본문을 변경하거나 제거한 경우
- 본문에 공백만 있거나 문법적으로 올바르지 않은 JSON이 포함된 경우
JSON 데이터는 사소한 문법 오류에도 민감하게 반응하므로, 올바른 JSON 포맷인지 확인해야 할 것이다.