블로그 이름 뭐하지
[Spring] Validation 본문
데이터를 검증하는 것을 뜻한다.
자바는 보통 NullPointException이 많이 발생하므로 이러한 검증과정이 중요하다.
Spring에서는 다른 검증과정도 손쉽게 처리하기 위해 Bean Validation을 제공한다.
Bean Validation 종류
@NotNull | null 불가 |
@NotEmpty | null, "" 불가 |
@NotBlank | null, "", " " 불가 (보통 이쪽을 많이 사용한다) |
@Size | 문자 길이 설정 |
@Max | 최댓값 설정 |
@Min | 최솟값 설정 |
@Positive | 양수 |
@Negative | 음수 |
이메일 형식 사용 | |
@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 |