[SpringBoot 구조] DTO 설명 및 정의 / 어노테이션
2023. 12. 31. 10:52ㆍSpringBoot+JPA
반응형
DTO 정의
클라이언트와 서버 간의 데이터 전송을 위해 사용되는 객체
데이터베이스에서 가져온 데이터나 서비스 간의 통신에 필요한 데이터를 담고 있는 객체
교환할 자료에 따라 여러 개로 구성해서 사용
필요한 데이터만을 포함하여 객체를 생성하므로, 불필요한 정보를 제외하고 필요한 정보만을 전송 가능
Entity와 1:1매칭할 필요 없음!
DTO 구조 및 작성 방법
데이터를 담는 필드
기본 생성자와 필요한 생성자, getter 및 setter 메서드를 포함
@Data
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ProductDTO {
private Integer productId;
@NotEmpty(message = "상품 이름은 필수 입력입니다.")
private String productName;
@NotNull(message = "가격은 필수 입력입니다.")
@Min(value = 0, message = "가격은 최소 0원 이상이어야 합니다.")
private Integer productPrice;
private CategoryTypeRole categoryTypeRole;
private LocalDateTime reDate;
private LocalDateTime moDate;
}
Controller에서 DTO 사용
클라이언트의 요청을 처리할 때, DTO를 사용하여 데이터를 주고받음
//삽입 처리
@PostMapping("/productinsert")
public String insertProc (@Valid ProductDTO productDTO, BindingResult bindingResult, Model model) throws Exception {
if(bindingResult.hasErrors()) {
model.addAttribute("categoryTypeRole", CategoryTypeRole.values());
return "/product/insert";
} productService.insert(productDTO);
return "redirect:/productlist";
}
//수정처리
@PostMapping("/productupdate")
public String updateProc (@Valid ProductDTO productDTO, BindingResult bindingResult, Model model) throws Exception {
if(bindingResult.hasErrors()) {
model.addAttribute("categoryTypeRole", CategoryTypeRole.values());
return "/product/update";
} productService.update(productDTO);
return "redirect:/productlist";
}
DTO 사용 어노테이션
@Data | 클래스에 대한 자동 생성된 메서드 getter 및 setter 메서드, equals(), hashCode(), toString() 등을 포함한 표준 데이터 객체 메서드를 생성 |
@AllArgsConstructor | 클래스의 모든 필드를 사용하여 생성자를 자동으로 생성 |
@NoArgsConstructor | 매개변수 없는 기본 생성자를 자동으로 생성 |
@Builder | 빌더 패턴을 구현하기 위한 메서드를 자동으로 생성 |
@Valid 어노테이션 속성
컨트롤에서 @Valid 어노테이션을 설정을 하면 해당 대상에 대해서 검증 처리
@NotNull(변수="오류메세지") |
검증오류 관련 어노테이션
@Notnull | 해당하는 필드의 값을 null을 허용하지 않는다. |
@NotEmpty | 해당하는 필드의 값을 null과 ""(길이 0) |
@NotBlank | 해당하는 필드의 값을 null과 "", " "(빈스페이스)을 허용하지 않는다. |
@Min | 해당필드의 최소값을 벗어났는지 검증 |
@Max | 해당필드의 최대값을 벗어났는지 검증 |
해당필드가 이메일 형식인지 검증 | |
@Size(min, max) | 최소값과 최대값을 벗어났는지 검증 |
반응형
'SpringBoot+JPA' 카테고리의 다른 글
[SpringBoot 구조] Controller 설명 및 정의 / 어노테이션 (0) | 2023.12.31 |
---|---|
[SpringBoot 구조] Service 설명 및 정의 / 어노테이션 (0) | 2023.12.31 |
[SpringBoot 구조] Repository 설명 및 정의 / 어노테이션 (0) | 2023.12.31 |
[SpringBoot 구조] Entity 설명 및 정의 / 어노테이션 (0) | 2023.12.22 |
[SpringBoot 구조] - Entity / DTO / Repository / Service / Controller (0) | 2023.12.20 |