Trouble Shooting

[Spring Boot] RequestBody @Valid ExceptionHandle

muggle-coder 2023. 9. 21. 01:38
728x90

RequestDto에서 validation을 설정하고 Handler에서 체크가 되어야하는데, 예외처리가 되지않는 현상이 있엇습니다.

@NotBlank(message = "매장 코드는 필수 입력 항목입니다.")
@Size(max = 5, message = "매장 코드는 최대 5자 입니다.")
private String shopCode;

 

RestControllerAdvice에서 설정한 곳 

@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    @Override
    protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {
        ErrorCode errorCode = ErrorCode.INVALID_BAD_REQUEST;

        List<String> errors = ex.getBindingResult().getFieldErrors()
                .stream()
                .map(e -> String.format("{ %s : %s }", e.getField() , e.getDefaultMessage()))
                .collect(Collectors.toList());

        ExceptionResponse exceptionResponse = ExceptionResponse.builder()
                .httpStatus(errorCode.getHttpStatus().value())
                .httpStatusCode(errorCode.getHttpStatus().name())
                .msg(String.join(", ", errors))
                .name(errorCode.name())
                .build();
        return ResponseEntity.status(errorCode.getHttpStatus()).body(BaseResponse.setFail(errorCode, exceptionResponse));
    }

 

 

 

아래처럼 해당하는 RequestBody앞에 @Valid 어노테이션을 추가해야합니다.

@PostMapping("/reservation")
public BaseResponse<OrderReservationResponseDto> postOrderReservation(@Valid @RequestBody OrderReservationRequestDto requestDto){
    return orderService.saveOrderReservation(requestDto);
}

 

되는 것을 확인했습니다.!!