-
[에러] JSON parse errorHealth-Genie 2024. 1. 6. 14:47728x90
에러 내용
JSON parse error: Cannot deserialize value of type `java.util.ArrayList<>` from Object value (token `JsonToken.START_OBJECT`)]
에러 원인
해당 프로젝트는 Routine이라는 Entity안에 WorkoutRecipe라는 내장객체가 있는데, Routine 작성시 workoutRecipe가 null로 반환되는 문제가 있었다.
Routine entity
public class Routine { ... @Embedded // 내장타입이다. private WorkoutRecipe workoutRecipe; ... }
Routine Dto
public class RoutineRequestDto { private Long id; private Day day; private String parts; private List<WorkoutRecipe> workoutRecipe; private String writer; // 헬스 루틴 작성자 닉네임 }
위와 같이 DTO가 선언되어 있어 아래와 같이 postman에 test을 시도했는데, workoutRecipe가 NPE를 뱉었다
{ "day" : "MONDAY", "parts" : "어깨", "name" : "a", "kg" : 2, "sets" : 2, "reps" : 2, "writer" : "예삐" }
( 참고로, name, kg, sets, reps는 내장타입의 필드들이다. )
위를 보니까 당연하게 workoutRecipe로 묶지 않아서 NPE를 뱉을 수 밖에없었다
그래서 2번째로는 아래와 같이 배열로 묶었는데 여기서 JSON parse error: Cannot deserialize value of type `java.util.ArrayList<>` from Object value (token `JsonToken.START_OBJECT`)] 이러한 에러가 발생했다
{ "day" : "MONDAY", "parts" : "어깨", "workoutRecipe" : [ "name" : "a", "kg" : 2, "sets" : 2, "reps" : 2 ], "writer" : "예삐" }
문제가 POSTMAN에서 body로 데이터를 보낼때 형태가 잘못 지정되어 생긴 오류였다.....
해결 방안
결론은 아래와 같이 postman 에 데이터를 잘 보내야 한다
{ //"level" : "EMPTY", "day" : "MONDAY", "parts" : "어깨", "workoutRecipe" : [ { "name" : "사이드 레터럴 레이즈", "kg" : 20, "sets" : 2, "reps" : 15 }, { "name" : "페이스풀 ", "kg" : 20, "sets" : 2, "reps" : 15 }, { "name" : "밀리터리 프레스 ", "kg" : 20, "sets" : 2, "reps" : 15 } ], "writer" : "33298325" }
workoutRecipe마다 { } 로 묶어서 보내야한다!
'Health-Genie' 카테고리의 다른 글
[error] 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 업데이트가 거부되었습니다 (0) 2024.01.22 [error] cannot deserialize from Object value (no delegate- or property-based Creator) (2) 2024.01.13 [이메일] univCert api를 사용한 대학 이메일 인증 (2) 2023.12.21 [에러] broken pipe 에러 (0) 2023.12.20 [postman] api 문서 만들기 (2) 2023.12.11