<aside> 💡 DTO의 값을 검증하는 경우에(특히 Request 시) 사용 할 수 있습니다.
</aside>
GlobalExceptionHandler에 아래 코드 추가
해당 코드는 Valid 실패 시 발생하는 예외를 catch해 400번 응답을 전송합니다.
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorDTO> dtoValidation(final MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error)-> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
ErrorDTO errorDTO = new ErrorDTO("", errors.toString());
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
.body(errorDTO);
}
응답 예시: @Positive에 대한 검증(@Valid) 실패 시 다음과 같은 응답을 받을 수 있습니다.
@Positive는 해당 필드가 0보다 큰 양수임을 명시합니다.
public static class CartItemQuantity {
private Long id;
@Positive
private Integer quantity;
}
Validation를 제공하는 어노테이션은 많으니 검색해보세요.
해당 DTO를 사용하는 Controller의 @RequestBody 앞에 @Valid를 사용하면 유효성을 검증합니다.
@PatchMapping
public ResponseEntity<CartResponseDTO.CartListItem> updateCartItemQuantity(@CurrentUser User user, @Valid @RequestBody CartRequestDTO.CartItemQuantity cartItemQuantity) {
CartResponseDTO.CartListItem cartListItem = cartService.updateCartItemQuantity(cartItemQuantity, user);
return ResponseEntity.ok(cartListItem);
}