Programming-[Backend]/Java
[TIL][작성Java - @RequestBody null 문제: jackson, @NotNull, @NoArgsConstructor
컴퓨터 탐험가 찰리
2023. 6. 11. 21:56
728x90
반응형
문제 상황
controller와 @RequestBody를 아래처럼 정의하고, http POST request을 json 형태로 전송했다. 그런데 에러가 발생했다.
@PostMapping("/stock")
public void stockItem(@RequestBody @Valid ItemPo itemPo) { ... }
//
@Data
public class ItemPo {
@NotNull
private ItemType itemType;
}
에러코드 일부
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of ...
(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
그래서 에러 메시지에서 원하는대로 default constructor을 넣어주기 위해서 ItemPo를 아래와 같이 수정하였다.
@Data
@NoArgsConstructor
public class ItemPo {
@NotNull
private ItemType itemType;
}
원인 분석
snake-type 설정
spring.jackson.property-naming-strategy=SNAKE_CASE
https://medium.com/@bhanuchaddha/parse-snake-case-json-in-spring-boot-66b42627a791
jackson lib.는 default constructor를 참고하도록 설정됨
@RequiredArgsConstructor는 final 혹은 @NonNull이 붙은 필드에만 적용된다.
728x90
반응형