Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

블로그 이름 뭐하지

[Spring] Validation 본문

Spring

[Spring] Validation

가는말이고우면오는말은come 2024. 11. 14. 18:00

데이터를 검증하는 것을 뜻한다.

자바는 보통 NullPointException이 많이 발생하므로 이러한 검증과정이 중요하다.

Spring에서는 다른 검증과정도 손쉽게 처리하기 위해 Bean Validation을 제공한다.

 

Bean Validation 종류

@NotNull null 불가
@NotEmpty null, "" 불가
@NotBlank null, "", " " 불가 (보통 이쪽을 많이 사용한다) 
@Size 문자 길이 설정
@Max 최댓값 설정
@Min 최솟값 설정
@Positive 양수
@Negative 음수
@Email 이메일 형식 사용
@Pattern 정규 표현식

 

Validation 적용

1) build.gradle에 validation의 의존성을 추가한다.

implementation 'org.springframework.boot:spring-boot-starter-validation'

 

2) RequestDto에 Bean Vaidation을 추가한다

package com.sparta.springauth.dto;

import jakarta.validation.constraints.*;
import lombok.Getter;

@Getter
public class ProductRequestDto {
    @NotBlank
    private String name;
    @Email
    private String email;
    @Positive(message = "양수만 가능합니다.")
    private int price;
    @Negative(message = "음수만 가능합니다.")
    private int discount;
    @Size(min=2, max=10)
    private String link;
    @Max(10)
    private int max;
    @Min(2)
    private int min;
}

 

3) 해당 RequestDto를 사용하는 Controller에 @Valid 어노테이션을 적용한다

@PostMapping("/validation")
@ResponseBody
public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {
    return requestDto;
}

 

4) Validation의 예외처리를 진행한다.

 

예외처리에는 여러 방법이 있지만 코드에서 차용한 방법은 BindingResult를 사용한 예외처리이다.

처리되는 에러를 bindingResult.getFieldErrors()로 리스트 형태로 모은다.

리스트에 에러가 들어오면 log에 에러를 담아 내보내고, 회원가입 페이지로 되돌아간다.

에러가 존재하지 않을 경우 회원가입을 진행하고 login 페이지로 이동한다.

@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto, BindingResult bindingResult) {
    // Validation 예외처리
    List<FieldError> fieldErrors = bindingResult.getFieldErrors();
    if(fieldErrors.size() > 0) {
        for (FieldError fieldError : bindingResult.getFieldErrors()) {
            log.error(fieldError.getField() + " 필드 : " + fieldError.getDefaultMessage());
        }
        return "redirect:/api/user/signup";
    }

    userService.signup(requestDto);

    return "redirect:/api/user/login-page";
}

 

'Spring' 카테고리의 다른 글

[Spring] Entity 연관 관계  (0) 2024.11.15
[Spring] RestTemplate과 OpenAPI  (0) 2024.11.15
[Spring] Spring Security  (0) 2024.11.14
[Spring] 필터(Filter)  (0) 2024.11.14
[Spring] 쿠키와 세션, JWT  (0) 2024.11.13