org.springframework.web.util.NestedServletException: Request processing failed;
nested exception is org.springframework.http.converter.HttpMessageConversionException:
Type definition error: [simple type, class com.myproject.community.request.PostCreate];
nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct
instance of `com.myproject.community.request.PostCreate` (no Creators, like default constructor, exist):
cannot deserialize from Object value (no delegate- or property-based Creator)
이런 에러를 만났다.
양심 고백하자면 에러 코드 안 읽고 테스트 코드 잘못 작성한 줄 알고 그 쪽만 뒤적거리면서 1시간 날렸다.
반성합니다..
Builder 사용 시 AllArgConstuctor를 붙여주던지 아니면 직접 모든 상태를 포함하는 생성자를 만들어줘야하는 것은 알고 있었는데
나는 이미 모든 상태를 포함한 생성자를 가지고 있다.
그럼 원인이 뭘까요.
해결책은 간단했다. 기본 생성자만 만들어주면 된다.
ObjectMapper가 @RequestBody를 바인딩할 때 기본 생성자를 사용하기 때문이다.
다만 접근 지시자를 protected로 설정했을 때 어떻게 이걸 가져가는지 궁금해서 찾아봤다.
놀랍게도 constructor를 reflection API로 빼가서 데이터를 강제로 주입하고 있었다.
무서운 녀석..
지금까지 dto에 Setter를 붙인 것도 쓸데 없는 일이였다는 걸 깨달은 뜻깊은 시간이였다.
끝.
'Language & Framework > 삽질기록' 카테고리의 다른 글
삽질 기록 (6) 실수로 삭제된(?) 깃허브 팀 레파지토리 살리기 (3) | 2022.09.23 |
---|---|
삽질 기록 (5) Spring Security의 UserDetails를 만지작거리다가 만난 LocalDate관련 예외 (0) | 2022.09.03 |
삽질 기록 (4) 같은 타입의 Bean이 두 개 이상 존재할 때 (2) | 2022.08.31 |
삽질 기록 (3) 아기 MockMvc에게 한글 알려주기 (0) | 2022.08.21 |
삽질 기록 (1) 스프링 부트와 리액트 CORS 해결하기 (0) | 2022.08.16 |