65.2. 빈 유효성 검사로 서비스 개발
65.2.1. 서비스 빈에 주석 달기
65.2.1.1. 개요
빈 유효성 검사를 사용하여 서비스를 개발하는 첫 번째 단계는 관련 검증 주석을 서비스를 나타내는 Java 클래스 또는 인터페이스에 적용하는 것입니다. 검증 주석을 사용하면 메서드 매개 변수, 반환 값 및 클래스 필드에 제약 조건을 적용할 수 있습니다. 그러면 서비스가 호출될 때마다 런타임에 확인됩니다.
65.2.1.2. 간단한 입력 매개변수 검증
매개변수가 간단한 Java 유형인 서비스 메서드의 매개변수를 검증하기 위해 빈 검증 API(javax.validation.constraints
패키지)에서 제약 조건 주석을 적용할 수 있습니다. 예를 들어 다음 코드 예제에서는 null (@Not
null 주석)에 대한 매개 변수를 모두 테스트 합니다. id
문자열이 \\d+
정규식 (@Pattern
주석)과 일치하는지 여부 및 name
문자열의 길이가 1 ~ 50 범위에 있는지 여부를 테스트합니다.
import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; ... @POST @Path("/books") public Response addBook( @NotNull @Pattern(regexp = "\\d+") @FormParam("id") String id, @NotNull @Size(min = 1, max = 50) @FormParam("name") String name) { // do some work return Response.created().build(); }
65.2.1.3. 복잡한 입력 매개변수 검증
복잡한 입력 매개변수(오브젝트 인스턴스)를 검증하려면 다음 예와 같이 @Valid
주석을 매개변수에 적용합니다.
import javax.validation.Valid; ... @POST @Path("/books") public Response addBook( @Valid Book book ) { // do some work return Response.created().build(); }
@Valid
주석은 자체적으로 제약 조건을 지정하지 않습니다. Book 매개 변수에 @Valid
에 주석을 답니다. 유효성 검사 엔진에 주석을 달 때 Book
클래스(recursively)의 정의 내에서 조회할 유효성 검사 엔진에 효과적으로 알립니다. 이 예제에서 Book
클래스는 다음과 같이 ID 및 name
필드에 대한 유효성 검사 제약 조건으로 정의됩니다.
import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; ... public class Book { @NotNull @Pattern(regexp = "\\d+") private String id; @NotNull @Size(min = 1, max = 50) private String name; // ... }
65.2.1.4. 반환 값 검증 (non-Response)
일반 메서드 반환 값(non-Response)에 검증을 적용하려면 메서드 서명 앞에 주석을 추가합니다. 예를 들어 nullness(@Not
null 주석)에 대한 반환 값을 테스트하고 검증 제약 조건을 재귀적으로 테스트하려면 다음과 같이 getBook
메서드에 주석을 달 수 있습니다.
import javax.validation.constraints.NotNull; import javax.validation.Valid; ... @GET @Path("/books/{bookId}") @Override @NotNull @Valid public Book getBook(@PathParam("bookId") String id) { return new Book( id ); }
65.2.1.5. 반환 값 검증 (Response)
javax.ws.rs.core.Response
오브젝트를 반환하는 메서드에 검증을 적용하려면 non-Response 사례에서와 동일한 주석을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
import javax.validation.constraints.NotNull; import javax.validation.Valid; import javax.ws.rs.core.Response; ... @GET @Path("/books/{bookId}") @Valid @NotNull public Response getBookResponse(@PathParam("bookId") String id) { return Response.ok( new Book( id ) ).build(); }
65.2.2. 표준 주석
65.2.2.1. 빈 검증 제약 조건
표 65.1. “빈 빈 유효성 검사에 대한 표준 주석” 빈 유효성 검사 사양에 정의된 표준 주석을 표시합니다. 이 사양은 필드 및 메서드 반환 값 및 매개변수에 대한 제약 조건을 정의하는 데 사용할 수 있습니다(클래스 수준에서 표준 주석 중 하나를 적용할 수 있음).
주석 | 적용 대상 | 설명 |
---|---|---|
|
|
주석이 달린 요소가 |
|
|
주석이 달린 요소가 |
|
|
|
|
|
|
|
|
주석이 있는 값이 최대 정수 숫자 및 소수 부분 소수 자릿수를 갖는 숫자인지 확인합니다.Checks whether the annotated value is a number having up to |
|
| 주석이 달린 날짜가 나중에 있는지 확인합니다. |
|
| 주석이 지정된 최대값보다 작거나 같은지 여부를 확인합니다. |
|
| 주석이 지정된 최소값보다 크거나 같은지 여부를 확인합니다.Checks whether the annotated value is greater than or equal to the specified minimum. |
| 모든 유형 |
주석이 달린 값이 |
| 모든 유형 |
주석이 달린 값이 |
|
| 주석이 달린 날짜가 과거인지 여부를 확인합니다. |
|
|
주석이 달린 문자열이 지정된 플래그 일치를 고려하여 정규 표현식 |
|
|
주석이 달린 컬렉션, 맵 또는 배열의 크기가 |
| 모든 비독성 유형 | 주석이 있는 오브젝트에 검증을 재귀적으로 수행합니다. 개체가 컬렉션 또는 배열인 경우 요소를 재귀적으로 유효성을 검사합니다.If the object is a collection or an array, the elements are validated recursively. 오브젝트가 맵인 경우 값 요소의 유효성을 재귀적으로 확인합니다. |
65.2.3. 사용자 정의 주석
65.2.3.1. Hibernate에서 사용자 정의 제약 조건 정의
빈 검증 API를 사용하여 자체 사용자 정의 제약 조건 주석을 정의할 수 있습니다. Hibernate 유효성 검사기 구현에서 이 작업을 수행하는 방법에 대한 자세한 내용은 Hibernate 검증기 참조 가이드의 사용자 지정 제한 조건 생성 장을 참조하십시오.