47.5. 예
다음 주석이 있는 java 8080이 있다고 가정합니다.
Car.java
public class Car { @NotNull private String manufacturer; @NotNull @Size(min = 5, max = 14, groups = OptionalChecks.class) private String licensePlate; // getter and setter }
사용자 정의 검증 그룹에 대한 인터페이스 정의
OptionalChecks.java
public interface OptionalChecks { }
다음 Camel 경로를 사용하면 속성 manufacturer 및 licensePlate에 대한 @NotNull 제약 조건만 검증됩니다(Camel은 기본 그룹 javax.validation.groups.Default
)을 사용합니다.
from("direct:start") .to("bean-validator://x") .to("mock:end")
OptionalChecks
그룹에서 제약 조건을 확인하려면 다음과 같이 경로를 정의해야 합니다.
from("direct:start") .to("bean-validator://x?group=OptionalChecks") .to("mock:end")
두 그룹의 제약 조건을 확인하려면 먼저 새 인터페이스를 정의해야 합니다.
AllChecks.java
@GroupSequence({Default.class, OptionalChecks.class}) public interface AllChecks { }
그러면 경로 정의가 다음과 같아야 합니다.
from("direct:start") .to("bean-validator://x?group=AllChecks") .to("mock:end")
그리고 자신의 메시지 보간, traversable resolver 및 constraint validator 팩토리를 제공해야 하는 경우 이와 같은 경로를 작성해야 합니다.
<bean id="myMessageInterpolator" class="my.ConstraintValidatorFactory" /> <bean id="myTraversableResolver" class="my.TraversableResolver" /> <bean id="myConstraintValidatorFactory" class="my.ConstraintValidatorFactory" /> from("direct:start") .to("bean-validator://x?group=AllChecks&messageInterpolator=#myMessageInterpolator &traversableResolver=#myTraversableResolver&constraintValidatorFactory=#myConstraintValidatorFactory") .to("mock:end")
제약 조건을 Java 주석이 아닌 XML로 설명할 수도 있습니다. 이 경우 다음과 같은 META-INF/validation.xml
파일을 제공해야 합니다.
validation.xml
<?xml version="1.0" encoding="UTF-8"?> <validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"> <default-provider>org.hibernate.validator.HibernateValidator</default-provider> <message-interpolator>org.hibernate.validator.engine.ResourceBundleMessageInterpolator</message-interpolator> <traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver> <constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory> <constraint-mapping>/constraints-car.xml</constraint-mapping> </validation-config>
constraints-car.xml
파일
constraints-car.xml
<?xml version="1.0" encoding="UTF-8"?> <constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd" xmlns="http://jboss.org/xml/ns/javax/validation/mapping"> <default-package>org.apache.camel.component.bean.validator</default-package> <bean class="CarWithoutAnnotations" ignore-annotations="true"> <field name="manufacturer"> <constraint annotation="javax.validation.constraints.NotNull" /> </field> <field name="licensePlate"> <constraint annotation="javax.validation.constraints.NotNull" /> <constraint annotation="javax.validation.constraints.Size"> <groups> <value>org.apache.camel.component.bean.validator.OptionalChecks</value> </groups> <element name="min">5</element> <element name="max">14</element> </constraint> </field> </bean> </constraint-mappings>
다음은 OrderedChecks 가 https://github.com/apache/camel/blob/master/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/OrderedChecks.java일 수 있는 예제 경로 정의의 XML 구문입니다.
본문에는 유효성을 검사할 클래스의 인스턴스가 포함되어야 합니다.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <to uri="bean-validator://x?group=org.apache.camel.component.bean.validator.OrderedChecks"/> </route> </camelContext> </beans>