JAX-RS는 Java 언어를 사용하여 RESTful 웹 서비스를 개발할 때 많이 사용되는 프레임워크입니다. 이를 통해 간단하게 API를 작성하고 호출할 수 있습니다. 하지만 API의 입력 데이터의 유효성을 검사하는 기능이 필요한 경우가 많이 있습니다. 이를 위해 JAX-RS에서 제공하는 데이터 검증과 유효성 검사 기능을 알아보겠습니다.
1. 데이터 검증 어노테이션 사용하기
JAX-RS에서는 javax.validation
패키지를 통해 데이터 검증을 위한 여러 어노테이션을 제공합니다. 이 어노테이션들은 입력 데이터의 각 필드에 적용하여 유효성을 검사할 수 있습니다.
가장 기본적인 어노테이션으로는 @NotNull
, @Size
, @Min
, @Max
등이 있습니다. 이들 어노테이션을 사용하여 필드의 값이 null이 아니고, 지정된 사이즈나 값 범위 내에 있는지 검증할 수 있습니다.
@Path("/users")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class UserController {
@POST
@Path("/")
public Response createUser(@NotNull @Size(min = 1, max = 50) String name) {
// 유효성 검사에 실패한 경우, JAX-RS는 자동으로 400 Bad Request 응답을 반환합니다.
// 유효성 검사에 통과한 경우, API 로직을 실행하고 200 OK 응답을 반환합니다.
}
}
위의 예제에서는 createUser
메서드의 name
매개변수에 @NotNull
어노테이션과 @Size
어노테이션을 적용했습니다. 이를 통해 name
필드의 값이 null이 아니고, 길이가 1에서 50 사이인지 검사합니다.
2. 커스텀 검증 어노테이션 만들기
JAX-RS에서 제공하는 어노테이션만으로는 모든 검증 규칙을 표현하기에는 한계가 있습니다. 이런 경우에는 커스텀 검증 어노테이션을 만들어 사용할 수 있습니다.
커스텀 검증 어노테이션을 만들기 위해서는 javax.validation.ConstraintValidator
인터페이스를 구현해야 합니다. 이 인터페이스를 구현하는 클래스에서는 검증 로직을 작성하여 입력 데이터의 유효성을 검사할 수 있습니다.
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyCustomValidator.class)
public @interface MyCustomValidation {
String message() default "Invalid value";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class MyCustomValidator implements ConstraintValidator<MyCustomValidation, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 유효성 검사를 위한 로직 작성
}
}
위의 예제에서는 @MyCustomValidation
이라는 커스텀 검증 어노테이션을 정의하였습니다. 이 어노테이션을 사용하면 해당 필드의 값이 특정 조건을 만족하는지 검사할 수 있습니다.
3. JAX-RS와 데이터 검증 통합하기
JAX-RS에서는 검증 예외가 발생할 경우 자동으로 400 Bad Request 응답을 반환하는 기능도 제공합니다. 이를 위해 javax.validation.ValidationExceptionMapper
클래스를 사용할 수 있습니다. 이 클래스를 사용하면 검증 예외가 발생하면 예외 메시지와 함께 400 Bad Request 응답을 자동으로 반환합니다.
@Provider
public class ValidationExceptionMapper implements ExceptionMapper<ValidationException> {
@Override
public Response toResponse(ValidationException exception) {
String message = exception.getMessage();
return Response.status(Response.Status.BAD_REQUEST).entity(message).build();
}
}
위의 예제에서는 javax.validation.ValidationException
예외가 발생하면 ValidationExceptionMapper
클래스가 해당 예외를 처리하여 400 Bad Request 응답을 반환합니다. 이를 JAX-RS 어플리케이션에 등록하면 자동으로 데이터 검증과 예외 처리를 통합할 수 있습니다.
JAX-RS를 사용하여 데이터 검증과 유효성 검사를 쉽게 구현할 수 있습니다. 데이터 검증 어노테이션을 사용하거나, 커스텀 검증 어노테이션을 만들어 사용하면 API의 입력 데이터의 유효성을 쉽게 검사할 수 있습니다. 또한, JAX-RS에서 제공하는 예외 처리 기능을 이용하여 검증 예외가 발생했을 때 적절한 응답을 반환할 수 있습니다.