Spring & SpringBoot

400에러 HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `jpabook.jpashop.api.

땅콩콩 2024. 1. 9. 15:12

DTO를 만들어서 api 요청, 응답을 처리하던 중 PUT메소드를 테스트하다가 400에러가 발생했다.

원인은 DTO로 사용하는 객체에 디폴트 생성자가 없어서 발생한 문제였다.

 

스프링부트를 사용한다고 해서 기본생성자가 꼭 필요한 것은 아니지만,

JPA 엔티티를 사용하면 리플렉션을 이용하기 때문에 기본생성자가 꼭 필요하다.

 

그리고 생성자가 없는 클래스는 클래스 파일을 컴파일하는 시점에 자바가 디폴트 생성자를 자동으로 생성해주지만, 임의로 작성한 생성자가 있을 경우, 자동으로 디폴트 생성자를 만들어주지 않는다.

 

나는 내 임의대로 생성자를 만들어뒀기때문에 기본 생성자가 생성되지 못했고

따라서 요청을 받아서 객체로 전환하는 JSON Serialize 과정에서 오류가 발생한 것 같다.

나는 대체 언제 이 의미없는 생성자를 왜 만들어뒀을까? ...미스테리다

 

이 요상한 생성자를 없애면 정상적으로 동작한다.

 

굿!

* 인프런 '실전 스프링부트와 JPA 2' 강의의 내용을 포함하고 있습니다!