Spring) 유효성 검사

TigerFriend·2023년 10월 14일
0

웹 개발

목록 보기
5/7
post-thumbnail

@valid

스프링에서는 유효성검사를 validation라이브러리를 통해 지원한다.
만약 스프링에서 유효성검사를 지원하지 않는다면 Controller에서 직접 if문으로 조건을 걸어서 검출해야한다. 이 번거로움을 줄여주는 것이 validation라이브러리다.

public class UserRequest {

//    @Data // getter, setter, toString
//    public static class JoinDTO {
//        private String username;
//        private String password;
//        private String email;
//    }
    @Data // getter, setter, toString
    public static class JoinDTO {
        @NotEmpty
        @Size(min = 3, max = 20)
        private String username;

        @NotEmpty
        @Size(min = 4, max = 20)
        private String password;

        @NotEmpty
        @Pattern(regexp = "^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$", message = "이메일 형식으로 작성해주세요")
        private String email;
    }

DTO의 필드에 어노테이션을 걸어줌으로써 클라이언트가 요구한 httpbody를 받을 때 확인할 수 있다.

이후 Controller에 join메소드 파라메터에 @Valid 어노테이션을 붙임으로써 디스패처 서블릿이 DTO에 있는 필드를 하나씩 검사하게 된다. 이후 통과하지 못한 필드 들의 에러를 잡기위해 파라미터로 Errors를 넣어서 관리할 수 있다.

@PostMapping("/join")
    public String join(@Valid UserRequest.JoinDTO requestDTO, Errors errors){
        System.out.println(requestDTO);

        if(errors.hasErrors()){
            //FieldError error = errors.getFieldErrors().get(0);
            for(FieldError error : errors.getFieldErrors()){
                // 해당 메세지를 클라이언트에게 응답해줘야 함.
                System.out.println(error.getDefaultMessage()+ ":" + error.getField());
            }

        }

        return "redirect:/loginForm";
    }

위 코드를 postman으로 실행해보면

콘솔창에 위와 같이 에러 내역을 확인할 수 있다.

profile
TigerFriends

0개의 댓글