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
반응형