본문 바로가기
Spring/기타 여러가지

DTO에 어떤 어노테이션 붙여야 할까

by doriver 2025. 4. 14.

 

Spring Boot에서 

Query String, Form Data와 같은 HTTP 요청 데이터들은 모두 WebDataBinder를 통해 DTO에 바인딩 됨

@RequestBody나 @ResponseBody 등을 통해서 데이터 바인딩을 할 때 Jackson 라이브러리를 사용, 정확히는 HttpMessageConverter 인터페이스를 구현한 Jackson2HttpMessageConverter 클래스를 통해 데이터 바인딩

 

HTTP 요청 데이터  Query String, Form Data, ...
JSON
???

 

 

요청 DTO

기본적인 Query String, Form Data 요청 데이터를 제공받기 위한 DTO

, 아래와 같은 불변 객체로 충분

@Getter
@RequiredArgsConstructor
public final class RequestDto {
    private final String searchText;
    private final String searchType;
}

IllegalStateException: Cannot resolve parameter names for constructor 생길경우
프로젝트의 Java Compiler에서  -parameter 옵션을 Compile 시에 활성화 시켜야 해결됨

 

WebDataBinder를 커스텀 하는 방법도 있는듯
@InitBinder 에서 binder.initDirectFieldAccess();

 

기본 생성자가 필요한 경우에는

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
public final class RequestDto {
    private String searchText;
    private String searchType;
}

 

JSON 요청 데이터인 경우 

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class RequestDto {
    private String searchText;
    private String searchType;
}

Spring이 JSON을 DTO로 매핑할 때, Jackson 라이브러리의 ObjectMapper를 사용

JSON → Java Object 로 역직렬화 할 때, DTO의 기본 생성자를 이용해 DTO를 생성하여 진행

JSON → DTO 로 데이터를 파싱할 때, reflection 기능을 통해 주입하므로, setter를 굳이 쓸 필요는 없다.

 

 

응답 DTO

해야함

 

 

 

 

https://medium.com/cdri/spring-boot-dto%EB%A5%BC-%ED%99%80%EB%8C%80%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EB%B0%A9%EB%B2%95-4d7946050d2a

 

[Spring Boot] DTO를 홀대하지 않는 방법

안녕하세요. CDRI에서 서버 개발을 담당하고 있는 John이라고 합니다.

medium.com

 

'Spring > 기타 여러가지' 카테고리의 다른 글

TCP프로토콜과 Socket, WebSocket, SseEmitter  (0) 2025.05.29
도메인 객체  (0) 2025.04.27
읽어볼 주제들  (0) 2025.02.08
@Scheduled을 이용해 일정 시간 마다 코드 실행  (0) 2025.02.04
ServletContainer 01  (0) 2025.02.01