cannot deserialize from object value (no delegate- or property-based creator)
위와 같은 에러가 발생했다면 아래글을 한번 확인해보자.
Member Class
- 먼저 데이터를 담을 모델을 정의하였습니다.
//Getter, Setter는 생략
public class Member {
private int id;
private String username;
private String password;
private String email;
public Member(int id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
}
HttpControllerTest
- 다음으로
POST
방식으로 요청을 해보았습니다. POST
방식은GET
방식과 달리 Body에 데이터를 담아야 합니다.
@RestController
public class HttpControllerTest {
...
@PostMapping("/http/post")
public String postTest(@RequestBody Member m) {
return "post 요청: " + m.getId() + ", " + m.getUsername() + ", " + m.getPassword() + ", " + m.getEmail();
}
...
}
에러 발생
cannot deserialize from object value
(no delegate- or property-based creator)
- 친절한 스택오버플로우에서는 이 에러가 발생한 이유를 다음과 같다고 합니다.
jackson library
가 빈 생성자가 없는 모델을 생성하는 방법을 모릅니다.
Solution
- 그래서 모델(Member)에 따로 빈 생성자를 추가해주어야 합니다.
//Getter, Setter는 생략
public class Member {
private int id;
private String username;
private String password;
private String email;
//기본 생성자 추가
public Member() {
}
public Member(int id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
}
위와 같이 JSON 형태로 데이터를 요청하는데 Object, 즉, Member 클래스에 딱 매핑시켜서 출력이 될 수 있는 이유는
바로 MessageConverter(스프링 부트)가 JSON을 Object로 변환을 해주기 때문입니다.
Reference
'Spring' 카테고리의 다른 글
MVC 아키텍처 (0) | 2021.05.21 |
---|---|
intellij에서 Spring Boot + jsp 사용하기 (0) | 2021.05.12 |
Spring Boot와 MySQL 연동 (쉬움) (0) | 2021.05.12 |
Spring vs Spring Boot (0) | 2021.04.15 |
Executing task 'Main.main()'... (0) | 2020.09.05 |
댓글