반응형
스프링 라이브러리 중에는 검증을 담당하는 validation 라이브러리가 있다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
build.gradle 에 이렇게 작성하면 사용할 수 있다.
이번 익명 게시판 API 만들기 과제에서 게시글의 필드값을 검증해야 했어서 이를 사용해봤다.
import org.hibernate.validator.constraints.Length;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
/**
* 게시글 생성 요청 DTO
* 생성되기 전 암호화된 비밀번호로 변경이 필요
*/
@Getter
public class PostCreateRequestDto {
@NotBlank
@Length(min = 1, max = 30)
private String title;
@NotBlank
@Length(min = 2, max = 20)
private String author;
@NotBlank
@Length(min = 4, max = 50)
private String password;
@NotBlank
private String contents;
public void changeEncodedPassword(String encodedPassword) {
this.password = encodedPassword;
}
}
먼저 빈값인지를 검증하는 @NotBlank, 길이를 검증하는 @Length 를 통해 검증을 해주었고, 만약 이 조건이 맞지 않는다면 MethodArgumentNotValidException 예외를 발생시킨다.
/**
* 에러 핸들링 컨트롤러. 모든 에러는 여기서 처리.
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 커스텀 예외가 아닌, Validation 라이브러리 종속 예외.
* 생성 및 수정 요청 시 검증되지 않은 입력값이 들어왔을 때 발생함.
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
protected ResponseEntity<ErrorResponse> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
final ErrorResponse response = new ErrorResponse(INVALID_INPUT_LENGTH);
return new ResponseEntity<>(response, INVALID_INPUT_LENGTH.getHttpStatus());
}
}
그리고 이 예외를 핸들링 하기 위해서 위와 같이 예외 전용 핸들러를 두어 에러 응답 객체를 반환해주었다.
반응형
'TIL ✍️' 카테고리의 다른 글
23년 11월 13일(월요일) - 31번째 TIL (1) | 2023.11.13 |
---|---|
23년 11월 10일(금요일) - 30번째 TIL (0) | 2023.11.10 |
23년 11월 8일(수요일) - 28번째 TIL (0) | 2023.11.08 |
23년 11월 7일(화요일) - 27번째 TIL (0) | 2023.11.07 |
23년 11월 6일(월요일) - 26번째 TIL (0) | 2023.11.06 |