본문 바로가기
Java Web/Spring Boot

[Spring Boot] Validation (유효성 검사)

by 스응 2023. 4. 11.
728x90
728x90

Validation

  - 예외를 방지하기 위해 미리 검증하는 과정 (방어적 코드를 대신해서 사용할 수 있음)

  - 검증해야 할 값이 많은 경우 코드의 길이가 길어짐

      → 횡단 관심사 (AOP 기반) : 핵심 기능과의 분리

  - 흩어져 있는 경우 어디에서 검증하는지 알기 어려움

      → 재사용에 대한 한계가 있음

  - 검증 로직이 변경되는 경우, 참조하는 클래스에서 로직이 변경되어야 하는 부분이 발생할 수 있음

  - 메서드 호출 전/후에 필터링 및 검증 수행

 

#  Validation 라이브러리 추가하기 (Gradle 빌드)

  1. build.gradle 파일에 명시

 

1
2
3
4
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-validation'  // Validation
    // ... (나머지)
}
cs

 

  2. build.gradle 파일 내 아무 곳이나 우클릭해서 메뉴 → [Gradle] → [Refresh Gradle Project] 클릭

 

 


관련 어노테이션

어노테이션 설명
@Valid 또는 @Validated 해당 객체에 대해 유효성 검사 실행
@Size(max = 최대길이, min = 최소길이) 문자 길이에 대한 제한 지정
@NotNull null 불가
@NotEmpty null, "" 불가
@NotBlank null, "", " " 불가
@Max(최댓값) 최댓값 지정
@Min(최솟값) 최솟값 지정
@Email @가 포함되어야 함
@Past 과거 날짜
@PastOrPresent 오늘 or 과거 날짜
@Future 미래 날짜
@FutureOrPresent 오늘 or 미래 날짜
@Pattern 정규식 적용
@AssertTrue / False 별도 로직 적용

 

#  오류 발생 시 생성되는 defaultMessage 직접 설정하기

  : @어노테이션(message = "메세지")

 

 

반응형
728x90

POST/PUT 방식일 때 유효성 검사

  - key-value 구조 사용 시, 매개변수에 제약조건 어노테이션 지정

                                          + 클래스 상단부에 반드시 @Validated 지정

  - DTO 형식 사용 시, 매개변수에 @Validated 선언

                                   + DTO의 멤버변수에 제약조건 어노테이션 지정

더보기

DTO

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 빌더패턴 자동 생성
public class User {
 
    private String name;
    @Min(10)
    private int age;
    // message 지정
    @Email(message = "이메일 형식이 틀렸습니다.")
    private String email;
    private String phoneNumber;
    
}
cs

 

Controller

 

1
2
3
4
5
6
7
@PostMapping("/user2")
public ResponseEntity<User> user2(@Valid @RequestBody User user) {
    // 관점 지향 패러다임 추가
    // AOP 기반의 Valid 라이브러리를 활용하면 공통적으로 들어가야 하는 부분의 코드를 분리시킬 수 있음
        
    return ResponseEntity.ok(user);
}
cs

 

 


GET/DELETE 방식일 때 유효성 검사

  - key-value 구조 사용 시, 매개변수에 제약조건 어노테이션 지정

                                          + 클래스 상단부에 반드시 @Validated 지정

  - DTO 형식 사용 시, 매개변수에 @Validated 선언

                                   + DTO의 멤버변수에 제약조건 어노테이션 지정

더보기

DTO

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder // 빌더패턴 자동 생성
public class User {
 
    private String name;
    @Min(10)
    private int age;
    // message 지정
    @Email(message = "이메일 형식이 틀렸습니다.")
    private String email;
    private String phoneNumber;
    
}
cs

 

Controller

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RestController
@Validated // <- GET 방식일 때에는 컨트롤러 상단부에 @Validated를 반드시 지정
public class UserController {
    
    // GET 방식일 때, 파라미터 앞에 어떤 유효성 검사를 할지 지정해주어야 함
 
    @GetMapping("/user")                  
    public User user(@Size(min = 2) @RequestParam String name, @NotNull @Min(1) @RequestParam Integer age) {
        User user = new User();
        user.setAge(age);
        user.setName(name);
        return user;
    }
    
    // object mapper를 통해서 파싱 처리하고 싶다면
    @GetMapping("/user2")
    public User user2(@Valid User user) {
        
        return user;
    }
    
}
cs

 

320x100
반응형

댓글