13.2.3. Jakarta Bean Validation 사용자 정의 제약 조건 사용
Jakarta Bean Validation API는 @NotNull, @ Size 등과 같은 표준 제한 조건 주석 집합을 정의합니다. 그러나 이러한 사전 정의된 제약 조건이 충분하지 않은 경우 특정 검증 요구 사항에 맞게 사용자 지정 제한 조건을 쉽게 생성할 수 있습니다.
Jakarta Bean Validation 사용자 지정 제약 조건을 생성하려면 제약 조건 주석을 생성하고 제약 조건 유효성 검사기를 구현해야 합니다. 다음은 JBoss EAP와 함께 제공되는 bean-validation-custom-constraint 빠른 시작에서 축약된 코드 예제입니다. 전체 작업 예는 빠른 시작을 참조하십시오.
13.2.3.1. 제한적인 주석 생성
다음 예제에서는 AddressValidator 클래스에 정의된 사용자 지정 제약 조건 집합을 사용하여 엔터티 Person 의 personAddress 필드가 검증되었음을 보여줍니다.
엔터티
Person을 만듭니다.예제:
개인수업package org.jboss.as.quickstarts.bean_validation_custom_constraint; @Entity @Table(name = "person") public class Person implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue @Column(name = "person_id") private Long personId; @NotNull @Size(min = 4) private String firstName; @NotNull @Size(min = 4) private String lastName; // Custom Constraint @Address for bean validation @NotNull @Address @OneToOne(mappedBy = "person", cascade = CascadeType.ALL) private PersonAddress personAddress; public Person() { } public Person(String firstName, String lastName, PersonAddress address) { this.firstName = firstName; this.lastName = lastName; this.personAddress = address; } /* getters and setters omitted for brevity*/ }제약 조건 유효성 검사기 파일을 생성합니다.
예제:
주소인터페이스package org.jboss.as.quickstarts.bean_validation_custom_constraint; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; // Linking the AddressValidator class with @Address annotation. @Constraint(validatedBy = { AddressValidator.class }) // This constraint annotation can be used only on fields and method parameters. @Target({ ElementType.FIELD, ElementType.PARAMETER }) @Retention(value = RetentionPolicy.RUNTIME) @Documented public @interface Address { // The message to return when the instance of MyAddress fails the validation. String message() default "Address Fields must not be null/empty and obey character limit constraints"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }예제:
PersonAddress클래스package org.jboss.as.quickstarts.bean_validation_custom_constraint; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToOne; import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.Table; @Entity @Table(name = "person_address") public class PersonAddress implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "person_id", unique = true, nullable = false) @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long personId; private String streetAddress; private String locality; private String city; private String state; private String country; private String pinCode; @OneToOne @PrimaryKeyJoinColumn private Person person; public PersonAddress() { } public PersonAddress(String streetAddress, String locality, String city, String state, String country, String pinCode) { this.streetAddress = streetAddress; this.locality = locality; this.city = city; this.state = state; this.country = country; this.pinCode = pinCode; } /* getters and setters omitted for brevity*/ }