스프링에서는 유효성검사를 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으로 실행해보면
콘솔창에 위와 같이 에러 내역을 확인할 수 있다.