12.6. Example
假设我们带有以下注解的 java bean
Car.java
以及我们自定义验证组的接口定义
OptionalChecks.java
public interface OptionalChecks { }
public interface OptionalChecks {
}
通过以下 Camel 路由,只有属性制造商和 licensePlate 上的 @NotNull 约束会被验证(Camel 使用默认组 javax.validation.Default
)。
from("direct:start") .to("bean-validator://x") .to("mock:end")
from("direct:start")
.to("bean-validator://x")
.to("mock:end")
如果要检查组中的 OptionalChecks
中的约束,则必须定义如下路由
from("direct:start") .to("bean-validator://x?group=OptionalChecks") .to("mock:end")
from("direct:start")
.to("bean-validator://x?group=OptionalChecks")
.to("mock:end")
如果要检查这两个组中的限制,您必须首先定义新接口
AllChecks.java
@GroupSequence({Default.class, OptionalChecks.class}) public interface AllChecks { }
@GroupSequence({Default.class, OptionalChecks.class})
public interface AllChecks {
}
然后,您的路由定义应如下所示
from("direct:start") .to("bean-validator://x?group=AllChecks") .to("mock:end")
from("direct:start")
.to("bean-validator://x?group=AllChecks")
.to("mock:end")
如果您必须提供自己的消息间策略器、遍历解析器和约束验证器工厂,则必须编写类似此的路由。
<bean id="myMessageInterpolator" class="my.ConstraintValidatorFactory" /> <bean id="myTraversableResolver" class="my.TraversableResolver" /> <bean id="myConstraintValidatorFactory" class="my.ConstraintValidatorFactory" />
<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")
from("direct:start")
.to("bean-validator://x?group=AllChecks&messageInterpolator=#myMessageInterpolator
&traversableResolver=#myTraversableResolver&constraintValidatorFactory=#myConstraintValidatorFactory")
.to("mock:end")
也可以将约束描述为 XML,而不是 Java 注解。在这种情况下,您必须提供文件 META-INF/validation.xml
,其外观如下
validation.xml
和 constraints-car.xml
文件
constraints-car.xml
以下是 OrderedChecks 示例路由定义的 XML 语法。
请注意,正文应包含要验证的类实例。