프로젝트를 진행할 때, 클라이언트에서 입력한 값을 받아올 때가 많습니다. 하지만 만약에 전화번호를 입력받아야 할 때, 이름을 입력한다든지, 이메일을 입력해야하는데 이상한 형태로 입력을 하는 등 입력한 형태가 의도한 대로 오지 않을 수도 있습니다.
따라서 서버에서는 클라이언트에서 입력한 값이 정확한 지 검증을 할 필요가 있는데, Spring에서는 어떻게 유효성 검사를 진행하는 지 알아보았습니다.
Spring 에서는 유효성 검사를 하기 위해서 의존성을 추가해야합니다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
예시를 들 DTO와 Controller 를 먼저 만들어 보겠습니다.
public class MemberDto {
@NotEmpty
@Email(regexp = "정규식")
private int email;
@NotEmpty
private String nickname;
}
@PostMapping("api/v1/member")
public Member save (@Valid @RequestBody MemberDto memberdto) {
~~~~
}
단순히 Dto에 @NotEmpty만 붙여서 검증을 하는 것이 아니라 save 메서드에서 받는 파라미터 앞에 @Vaild 어노테이션을 붙여야만 유효성 검증을 해줍니다.
값이 올바르게 들어오지 않았다면 MethodArgumentNotValidException 예외와 400 Bad Request 상태코드를 반환하게 됩니다.
따라서 예외코드에 따른 예외처리도 따로 해주어야 합니다.
Decimal과 기본 Max/Min의 차이는 범위 값의 차이입니다. String을 사용하는지 Integer를 사용하는지에 따라 범위가 달라지기 때문입니다.
@Vaild는 그룹 유효성 검사를 지원하지 않습니다.
따라서 그룹 유효성 검사를 진행하고 싶다면 @Vaild의 확장한 @Vaildated 를 사용하면 되겠습니다.
[Spring] @Valid, @Validated 사용법
Spring Boot에서 DTO 검증하기
@Valid 정리해보기