의문
`@RequestBody`를 통해 DTO를 매핑시킬 때 큰 생각없이 `Setter` 및 `기본 생성자`를 사용했었다.
기본 생성자를 통해 객체를 생성하고, Setter를 통해 필드 값을 주입하지 않을까? 라고 생각했기 때문이다.
다양한 블로그에서 잘 소개되어있지만, 위의 예상과는 조금 다르게 마치 JPA 처럼 `리플렉션`을 통해 매핑이 진행된다.
기본 생성자는 필요하다. 하지만 이후 필드값은 리플렉션을 통해 매핑된다. 그렇기에 Setter는 필요없다.
기본 생성자가 없어도 동작되던데..?
위의 결론에 따르면 기본 생성자는 필수이다. 하지만 프로젝트를 진행하던 중 기본 생성자 없이도 오류 없이 동작하는 모습을 확인할 수 있었다.
@Getter
public class LogInDto {
private String email;
private String password;
}
Jackson 라이브러리 의존성
build.gradle에 `jackson-module-parameter-names` 의존성을 추가하면 기본 생성자가 없어도 동작한다.
Spring Boot를 사용한다면, `spring-boot-starter-web`에서 위 의존성이 자동으로 추가된다.
* 주의할 점은 빌드 타입을 Gradle로 설정한 경우만 제대로 동작한다. IntelliJ IDEA로 빌드하면 실패한다.
'Spring' 카테고리의 다른 글
[Spring] 포인트컷 지시자 (AspectJ Pointcut Expression) - 1 (0) | 2024.05.10 |
---|---|
[Spring] 스프링 AOP 예제 구현 (0) | 2024.05.09 |
[Spring] 스프링 AOP 개념 (2) | 2024.03.07 |
[Spring] @Aspect (0) | 2024.03.07 |
[Spring] AutoProxyCreator (스프링이 제공하는 빈 후처리기) (2) | 2024.03.06 |