Validation - 검증 과정
Bean Validation
- 간편하게 사용할 수 있는 여러 애너테이션을 제공
@NotNull | null불가 |
@NotEmpty | null, ""불가 |
@NotBlank | null,""." " 불가 |
@Size | 문자 길이 측정 |
@Max | 최대값 |
@Min | 최소값 |
@positive | 양수 |
@Negative | 음수 |
E-mail 형식 | |
@Pattern | 정규 표현식 |
build.gradle : validation
implementation 'org.springframework.boot:spring-boot-starter-validation'
Validation 적용
ex) ProductRequestDto
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;
}
@Valid
Bean Validation을 적용한 해당 Object validation 실행
testValid
@PostMapping("/validation")
@ResponseBody
public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto) {
return requestDto;
}
JSON 데이터
{
"name" : "Robbie",
"email" : "Robbie@gmail.com",
"price" : 1234,
"discount" : -1234,
"link" : "54321",
"max" : 10,
"min" : 2
}
Validation 예외처리
회원가입 적용
SignupRequestDto
package com.sparta.springauth.dto;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class SignupRequestDto {
@NotBlank
private String username;
@NotBlank
private String password;
@Email
@NotBlank
private String email;
private boolean admin = false;
private String adminToken = "";
}
UserController : signup에 @Valid 적용
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto) {
userService.signup(requestDto);
return "redirect:/api/user/login-page";
}
Validation 예외처리
- 회원가입 진행 시 데이터 검증 시 오류가 발생했을 때 로그인 페이지가 아니라 회원가입 페이지로 이동 하려면 Validation 예외를 처리해야합니다.
BindingResult
- 예외가 발생하면 BindingResult 객체에 오류에 대한 정보가 담깁니다.
- 파라미터로 BindingResult 객체를 받아올 수 있습니다.
UserController
package com.sparta.springauth.controller;
import com.sparta.springauth.dto.LoginRequestDto;
import com.sparta.springauth.dto.SignupRequestDto;
import com.sparta.springauth.service.UserService;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Slf4j
@Controller
@RequestMapping("/api")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/user/login-page")
public String loginPage() {
return "login";
}
@GetMapping("/user/signup")
public String signupPage() {
return "signup";
}
@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";
}
}
bindingResult.getFieldErrors()
- 발생한 오류들에 대한 정보가 담긴 List<FieldError> 리스트를 가져옵니다.
'TIL' 카테고리의 다른 글
TIL 240604 Annotation (0) | 2024.06.05 |
---|---|
TIL 240603 인증, 인가 (0) | 2024.06.04 |
TIL 240530 Spring Security 프레임 워크, JWT 로그인 (0) | 2024.05.31 |
TIL 240529 회원기능 설계, JWT 로그인 인증처리(Filter) (0) | 2024.05.30 |
240528 MVC 패턴 (0) | 2024.05.29 |