MessageConverter
들 중 하나인 MappingJackson2HttpMessageConverter
를 통해 Java 객체로 변환되는데, 이는 ObjectMapper
라는 클래스를 사용한다. ObjectMapper
는 Json 메세지를 자바 객체로 변환하는 과정에서 객체의 기본 생성자를 통해 객체를 생성하고, 내부적으로 Reflection을 사용한다.@Getter
@ToString
@EqualsAndHashCode
public class ReqDto {
...
}
ParameterNamesModule
'org.springframework.boot:spring-boot-starter-web'
를 gradle에 추가하면 com.fasterxml.jackson.module:jackson-module-parameter-names
도 자동으로 추가한다. ⭐️⭐️⭐️com.fasterxml.jackson.module:jackson-module-parameter-names
모듈안의 ParameterNamesModule
클래스가 JsonCreator
를 사용해 기본 생성자가 없는 객체도 역직렬화가 가능하게 설정해준다.⛔️ 아래처럼 해당 모듈을 제거하면, 기본 생성자 없이 역직렬화가 수행되지 않는다.
dependencies {
implementation ('org.springframework.boot:spring-boot-starter-web'){
exclude group: 'com.fasterxml.jackson.module', module: 'jackson-module-parameter-names'
}
}
출처
[Spring] @RequestBody vs @ModelAttribute
[Spring] @RequestBody, @ModelAttribute, @RequestParam의 차이
@ModelAttribute을 setter 없이 사용할 수 있는 이유
@RequestBody는 왜 Setter가 없어도 작동할까?
인프런-PostCreate 기본 생성자 문제 질문
[Spring] 2. jackson을 이용한 data binding 이해하기(생성자, constructor)
@RequestBody에 왜 기본 생성자는 필요하고, Setter는 필요 없을까? #1
Spring에서의 직렬화