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

2023. 4. 11. 19:26·Java/Spring Boot
728x90
728x90

Validation

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

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

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

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

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

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

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

 

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

  1. build.gradle 파일에 명시

 

1
2
3
4
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-validation'  // Validation
    // ... (나머지)
}
Colored by Color Scripter
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;
    
}
Colored by Color Scripter
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);
}
Colored by Color Scripter
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;
    
}
Colored by Color Scripter
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;
    }
    
}
Colored by Color Scripter
cs

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Spring Boot' 카테고리의 다른 글

[Spring Boot] 예외 처리 (exception)  (0) 2023.04.12
[Spring Boot] Validation 관련 : BindingResult 클래스  (0) 2023.04.11
[Spring Boot] AOP (관점 지향 프로그래밍) ★  (0) 2023.04.11
[Spring Boot] ResponseEntity  (0) 2023.04.11
[Spring Boot] IoC (제어의 역전) / DI (의존성 주입) ★  (0) 2023.04.11
'Java/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] 예외 처리 (exception)
  • [Spring Boot] Validation 관련 : BindingResult 클래스
  • [Spring Boot] AOP (관점 지향 프로그래밍) ★
  • [Spring Boot] ResponseEntity
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    HTML
    SEO
    http
    C#
    typeScript
    Swing
    티스토리챌린지
    SpringBoot
    Hotkeys
    tailwindcss
    zapier
    오블완
    개발일지
    CSS
    jQuery
    Wordpress
    Codeigniter
    SWAGGER
    cs
    git
    jsp
    Android
    js
    SQL
    errorNote
    면접
    java
    vuejs
    php
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Spring Boot] Validation (유효성 검사)
상단으로

티스토리툴바