Health-Genie
[에러] JSON parse error
j9972
2024. 1. 6. 14:47
728x90
에러 내용
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마다 { } 로 묶어서 보내야한다!