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
반응형
'Programming-[Backend] > Java' 카테고리의 다른 글
자바 linter, 포매팅 처리 : spotless, googlejavaformat, commit시 자동 적용 (0) | 2024.05.26 |
---|---|
[경험 요약] 자바 테스트 객체 자동으로 만들기: Instancio 라이브러리 (0) | 2024.05.20 |
[TIL] 클래스 내 private 메서드 임시 테스트 @PostConstruct, Column 이름 예약어 escape 처리 (0) | 2023.05.18 |
자바 입력 : InputStream, InputStreamReader, BufferedStream, Scanner (0) | 2022.06.02 |
에러 발생 시 특정 기능을 하도록 만들기 : 정적 팩토리 메서드 (0) | 2022.06.01 |