Spring Boot 에서는 Validation을 통해 데이터의 유효성을 검증할 수 있다.
public class SignUpRequestDto {
@NotBlank @Email
private String email;
@NotBlank @Size(min = 8, max = 20)
private String password;
@NotBlank
private String nickname;
@NotBlank @Pattern(regexp = "^[0-9]{11,13}$")
private String telNumber;
@NotBlank
private String address;
private String addressDetail;
@NotNull @AssertTrue
private Boolean agreedPersonal;
}
회원가입 요청에 대한 DTO 객체이다.
멤버 변수에 annotaion을 적용하여 유효성 검증을 지정할 수 있다.
- @NotBlank: 해당 필드가 null이 아니며, 공백을 제외한 길이가 0보다 커야 함을 나타냅니다. 주로 String 타입에 사용됩니다.
- @Email: 해당 필드가 이메일 주소 형식에 맞아야 함을 나타냅니다.
- @Size(min = x, max = y): 해당 필드의 크기가 지정된 범위 내에 있어야 함을 나타냅니다. min과 max를 통해 최소값과 최대값을 지정할 수 있습니다.
- @Pattern(regexp = "패턴"): 해당 필드가 주어진 정규 표현식에 일치해야 함을 나타냅니다. 여기서는 전화번호가 특정 패턴을 따르도록 강제하고 있습니다.
- @NotNull: 해당 필드가 null이 아니어야 함을 나타냅니다. 모든 객체 타입에 사용할 수 있습니다.
- @AssertTrue: 해당 필드의 값이 true이어야 함을 나타냅니다. 주로 boolean 타입에 사용되며, 약관 동의 여부 확인 등에 사용될 수 있습니다.
- @Min(value): 숫자 필드가 지정된 최소값 이상이어야 함을 나타냅니다.
- @Max(value): 숫자 필드가 지정된 최대값 이하이어야 함을 나타냅니다.
- @Digits(integer, fraction): 숫자 필드가 가질 수 있는 정수 부분과 소수 부분의 자릿수를 지정합니다.
- @DecimalMin(value): 숫자 필드가 지정된 값 이상이어야 함을 나타내며, 소수를 허용합니다.
- @DecimalMax(value): 숫자 필드가 지정된 값 이하이어야 함을 나타내며, 소수를 허용합니다.
- @Future 및 @FutureOrPresent: 해당 필드의 날짜/시간이 현재보다 미래여야 함을 나타냅니다. @FutureOrPresent는 현재 시간도 유효함을 의미합니다.
- @Past 및 @PastOrPresent: 해당 필드의 날짜/시간이 현재보다 과거여야 함을 나타냅니다. @PastOrPresent는 현재 시간도 유효함을 의미합니다.
- @Positive 및 @PositiveOrZero: 숫자 필드가 각각 양수이거나 0을 포함한 양수여야 함을 나타냅니다.
- @Negative 및 @NegativeOrZero: 숫자 필드가 각각 음수이거나 0을 포함한 음수여야 함을 나타냅니다.
- @NotEmpty: 컬렉션, 맵, 배열, 문자열 등이 비어있지 않아야 함을 나타냅니다.
RequestBody로 받은 DTO를 서버 사이드에서 @Valid 어노테이션을 통해 유효성을 검증한다
public class AuthController {
private final AuthService authService;
@PostMapping("/sign-up")
public ResponseEntity<? super SignUpResponseDto> signUp(
@RequestBody @Valid SignUpRequestDto requestBody
) {
ResponseEntity<? super SignUpResponseDto> response = authService.signUp(requestBody);
return response;
}
@PostMapping("/sign-in")
public ResponseEntity<? super SignInResponseDto> signIn(
@RequestBody @Valid SignInRequestDto requestBody
){
ResponseEntity<? super SignInResponseDto> response = authService.signIn(requestBody);
return response;
}
}
validation fail은 RestController Advice를 통해 예외 처리를 했다.
RestControllerAdvice
여런 컨트롤러에 대해서 전역적인 Exeption Handling을 제공한다.
ControllerAdvie + ResponseBody를 합쳐놓은 형태로, 에러 핸들링 ResponseBody로 핸들링에 대해서 객체로 리턴해줄 수 있다.
@RestControllerAdvice
public class BadRequestExceptionHandler {
@ExceptionHandler({MethodArgumentNotValidException.class, HttpMessageNotReadableException.class})
public ResponseEntity<ResponseDto> validationExceptionHandler(Exception exception) {
return ResponseDto.validationFailed();
}
}
'Spring Boot' 카테고리의 다른 글
ORM JPA Hibernate Spring Data JPA (0) | 2024.01.30 |
---|---|
Mapping을 인식하지 못할 때(Java VScode Clean) (0) | 2024.01.17 |
[블로그 프로젝트] Response Entity (0) | 2024.01.15 |
스프링 부트 Controller, DTO (0) | 2024.01.12 |
[블로그 프로젝트] 스프링 프로젝트 생성 (0) | 2024.01.12 |