어노테이션 | 설명 | 적용 대상 | 허용되지 않는 예시 |
---|---|---|---|
@NotNull | null 이 아님 | 모든 타입 | null |
@NotEmpty | null 이 아니고, 요소가 1개 이상 | Collection, Map, Array, String | null , "" |
@NotBlank | null 이 아니고, 공백이 아닌 문자가 1개 이상 | String | null , "" , " " |
다음은 REST API 요청 값을 검증하고 Bean Validation 예외를 처리하는 방법을 정리한 내용이다:
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class UserDTO {
@NotNull(message = "ID cannot be null")
private Long id;
@NotBlank(message = "Name cannot be blank")
@Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
private String name;
// getters and setters
}
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController
@RequestMapping("/api/users")
public class UserController {
@PostMapping
public ResponseEntity<String> createUser(@Valid @RequestBody UserDTO userDTO) {
// 유효성 검증에 통과하면 로직 실행
return ResponseEntity.ok("User is valid");
}
}
Bean Validation에서 발생하는 예외를 처리하기 위해 @ControllerAdvice
와 @ExceptionHandler
를 사용하여 전역 예외 처리기를 구현할 수 있다.
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidationExceptions(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);
});
return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
}
}
POST /api/users
요청에서 유효성 검증에 실패하면, 다음과 같은 형태의 응답을 받게 된다.
{
"id": "ID cannot be null",
"name": "Name must be between 2 and 30 characters"
}
@NotNull
, @NotBlank
, @Size
등의 어노테이션을 사용하여 필드 단위의 유효성을 검증한다.@Valid
또는 @Validated
어노테이션을 사용하여 컨트롤러 메서드의 파라미터로 전달된 객체를 검증한다.@ControllerAdvice
와 @ExceptionHandler
를 사용하여 유효성 검증 실패 시 발생하는 예외를 처리하고 적절한 응답을 반환한다.이 방법을 통해 REST API 요청 값의 유효성을 검증하고, 유효성 검증 실패 시 사용자에게 명확한 오류 메시지를 제공할 수 있다.