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
해야함
[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 |