RequestDto를 사용하는 모든 Controller에 @Valid 어노테이션을 붙인다.
@PostMapping
public ResponseEntity saveReserve(@AuthenticationPrincipal LoginUser loginUser, @Valid @RequestBody ReserveSaveReqDto reserveSaveReqDto) {
reserveSaveReqDto.checkTimeStatus();
reserveService.saveReserved(loginUser.getUser().getId(), reserveSaveReqDto);
return new ResponseEntity<>(new ResponseDto<>(1, "정보가 성공적으로 등록되었습니다.", null), CREATED);
}
RestControllerAdvice
@Valid 어노테이션에서 문제가 발생할 경우 MethodArgumentNotValidException.class 예외가 발생하는데 해당 Exception을 RestControllerAdvice에 설정을 추가한다.
RequestDto 중 유효성 검사를 통과하지 못한 필드에 대한 정보를 Response로 반환한다.
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity methodArgumentNotValidException(MethodArgumentNotValidException e) {
log.error(e.getMessage());
BindingResult bindingResult = e.getBindingResult();
Map<String, String> errorMap = new HashMap<>();
if (bindingResult.hasErrors()) {
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError error : fieldErrors) {
errorMap.put(error.getField(), error.getDefaultMessage());
}
}
return new ResponseEntity<>(new ResponseDto<>(-1, "데이터 유효성 검증에 실패하였습니다.", errorMap), HttpStatus.BAD_REQUEST);
}
✏️ Description
클라이언트에서 서버에 요청을 전송할 때
RequestBody
에 데이터를 담아 전송하는 경우가 있다. 해당 과정에서 클라이언트에서 전송한 데이터의 형식이 서버에서 관리하는 데이터 형식과 다를 경우 예외 처리를 발생시켜야 한다.모든 요청의 RequestBody의 유효성 작업이 수행될 수 있도록 코드를 수정한다.
💻 Process
RequestDTO
모든 RequestDto를 확인하여 조건을 할당한다.
RestController
RequestDto를 사용하는 모든 Controller에
@Valid
어노테이션을 붙인다.RestControllerAdvice
@Valid
어노테이션에서 문제가 발생할 경우MethodArgumentNotValidException.class
예외가 발생하는데 해당 Exception을 RestControllerAdvice에 설정을 추가한다. RequestDto 중 유효성 검사를 통과하지 못한 필드에 대한 정보를 Response로 반환한다.