728x90
반응형
SMALL
학습 내용
- 데이터 검증과 Validation
- Lombok
학습 정리
1. 데이터 검증과 Validation
의존성 주입
implementation 'jakarta.validation:jakarta.validation-api:3.0.2' implementation 'org.hibernate.validator:hibernate-validator:7.0.2.Final'
주요 Validation 애너테이션
@NotNull(message = "값이 null이 아니어야 함.") private String name; @Size(min =2, max = 20, message = "문자열 또는 컬렉션 크기제한") private String name; @Pattern(pegex = "^\\d{10}$", message = "값이 특정 정귝식을 만족해야함") private String phoneNumber; @Email(message = "이메일 형식 검증") private String email; @Future(message = "날짜가 미래인지 검증") private LocalDate date; @Past(message = "날짜가 과거인지 검증") private LocalDate date;
사용법
# Request DTO # 해당 필드위에 Validation 에노테이션 사용 @Getter public class UserRequest { @NotNull(message = "Name is required") @Size(min = 2, max = 20, message = "Name must be between 2and20 characters") String username; @NotBlank(message = "Email cannot be null or blank") @Email(message = "Email must be valid") String email; @Pattern(regexp = "^\\d{10}$", message = "Phone number must be 10 digits") String phoneNumber; @NotNull(message = "passwordHash is required") String passwordHash; @NotNull(message = "role is required") String role; } #Controller #컨트롤러 파라미터 검증해야할 객체 앞에 @Valid 사용 @RestController @RequestMapping("/api/users") @RequiredArgsConstructor public class UserController { private final UserService userService; @PostMapping public ApiResponse<UserResponse> create(@Valid @RequestBody UserRequest request) { return ApiResponse.Success(userService.create(request)); } }
유효성 검증 실패시 MethodArgumentNotValidException 또는 BindException 예외 발생
2. Lombok 사용
@Getter, @Setter : 필드의 Getter와 Setter를 자동 생성
@Getter public class Product { private String name; @Setter private double price; }
@Builder : 객체 생성시 빌더패턴 제공
- 빌더는 클래스, 생성자에 사용이 가능함
특징 클래스에 @Builder 생성자에 @Builder 적용 범위 모든 필드에 대해 빌더를 제공 특정 생성자에 대해 빌더 제공 유연성 유연하게 모든 필드를 선택적으로 초기화 가능 초기화할 필드를 제한하여 명확한 목적성을 부여 사용 사례 DTO, Response 객체 등 모든 필드를 초기화해야 하는 경우 필수 필드만 초기화해야 하거나 일부 필드만 빌더 패턴을 사용할 때 예제 코드 생성 모든 필드에 대한 빌더 메서드 제공 생성자에 정의된 필드만 빌더 메서드로 제공 제약 사항 빌더를 통한 불필요한 유연성 제공 가능성 추가적인 생성자를 구현하지 않으면 다른 초기화 방식 사용 불가
- 빌더는 클래스, 생성자에 사용이 가능함
@FieldDefaults(level = AccessLevel.PRIVATE) : 해당 클래스의 모든 필드를 private로 설정
@FieldDefaults(level = AccessLevel.PRIVATE) public class User { String name; String password; }
@JsonInclude(JsonInclude.Include.NON_NULL) : JSON 응답에서 null필드는 제외하고 응답
# 닉네임이 null 이면 name만 나감 @JsonInclude(JsonInclude.Include.NON_NULL) public class UserResponse { privete String name; private String nickName; }
@JsonFormat : 날짜와 시간의 포맷을 지정
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createdAt;
@RequiredArgsConstructor : final 이나 @NonNull 이 붙은 필드를 초기화 하는 생성자를 자동 생성
@NoArgsConstructor : 기본 생성자 생성
@AllArgsConstructor : 모든 필드를 포함하는 생성자 생성
728x90
반응형
LIST
'TIL' 카테고리의 다른 글
2_1.DB 설계 기본 개념 및 연관관계 매핑 (0) | 2025.01.09 |
---|---|
1_5. CRUD 구현과 MapStruct (0) | 2025.01.09 |
1_4.JPA Entity 설계와 DB 형상관리 (0) | 2025.01.09 |
1_2.Spring MVC와 Controller 설계, 공통 에러 (0) | 2025.01.09 |
1_1.Spring Framework 환경 구성 (0) | 2025.01.09 |