2023.08.31 - 스프링 숙련(3주차)

mjjin·2023년 8월 30일
0

Validation

입력값에 대한 검증을 진행할 수 있다.

  • Bean Validation
    간편하게 사용할 수 있는 어노테이션으로
    코드 위에 적어주면 된다.

<예시>

@Getter
@Setter
public class SignupRequestDto {
    @NotBlank
    private String username;
    @NotBlank
    private String password;
    @Pattern(regexp = "^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$")
    @NotBlank
    private String email;
    private boolean admin = false;
    private String adminToken = "";
}

유효성 검사 어노테이션 종류

어노테이션 설명
@Null:null만 허용한다.
@NotNull:빈 문자열(""), 공백(" ")은 허용하되, Null은 허용하지 않음
@NotEmpty:공백(" ")은 허용하되, Null과 빈 문자열("")은 허용하지 않음
@NotBlank:null, 빈 문자열(""), 공백(" ") 모두 허용하지 않는다.
@Email:이메일 형식을 검사한다. 단, 빈 문자열("")의 경우엔 통과 시킨다. ( @Pattern을 통한 정규식 검사를 더 많이 사용
@Pattern(regexp = ):정규식 검사할 때 사용한다.
@Size(min=, max=):길이를 제한할 때 사용한다.
@Max(value = ):value 이하의 값만 허용한다.
@Min(value = ):value 이상의 값만 허용한다.
@Positive:값을 양수로 제한한다.
@PositiveOrZero:값을 양수와 0만 가능하도록 제한한다.
@Negative:값을 음수로 제한한다.
@NegativeOrZero:값을 음수와 0만 가능하도록 제한한다.
@Future:Now 보다 미래의 날짜, 시간이어야 한다.
@FutureOrPresent:Now 거나 미래의 날짜, 시간이어야 한다.
@Past:Now 보다 과거의 날짜, 시간이어야 한다.
@PastFutureOrPresent:Now 거나 과거의 날짜, 시간이어야 한다

프로젝트 설정

// build.gradle > dependencies
implementation 'org.springframework.boot:spring-boot-starter-validation'
// Ctroller
@PostMapping("/user/signup")
public String signup(@Valid SignupRequestDto requestDto) { // @Valid 어노테이션을 붙여준다.
    userService.signup(requestDto);

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

예외처리 예시

@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>리스트를 가져온다.

정규표현식 (@Pattern)

정규표현식 테스트 사이트

정규표현식은 일정한 규칙을 가진 문자열을 필터링 하거나, 치환할 수 있다.
프로그래밍 뿐만이 아닌 간단한 문서 작업등에서 아주 유용하게 사용할 수 있기 때문에
간단한 치환이나 필터 등은 자주 사용해왔었다.

정규표현식이란?

<Spring 이메일 형식 검증 예제>

// RequestDto
    @Pattern(regexp = "^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$")
    @NotBlank
    private String email;

0개의 댓글