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를 붙인 것도 쓸데 없는 일이였다는 걸 깨달은 뜻깊은 시간이였다.
728x90
'Study > 개발일지' 카테고리의 다른 글
[백엔드온라인TIL] MVC 구조에 대해 각 역할과 흐름을 설명하시오 (57일차) (0) | 2023.08.17 |
---|---|
[백엔드온라인TIL] Spring Test junit5 (56일차) (0) | 2023.08.14 |
[백엔드온라인TIL] Querydsl 활용 (55일차) (0) | 2023.08.11 |
[백엔드온라인TIL] github Action과 ci/cd (54일차) (0) | 2023.08.10 |
[백엔드온라인TIL] JPA 엔티티에 json 타입지정하기 (53일차) (1) | 2023.08.09 |