Hibernate Validator 第10篇:声明方法约束

mac2026-04-21  5

本篇文章讲了方法的参数约束部分。

一. 参数约束

通过加约束注解在方法或构造器的参数上,可以指定方法或构造器的前置条件,如下例:

public class RentalStation { public RentalStation(@NotNull String name) { } public void rentCar( @NotNull Customer customer, @NotNull @Future Date startDate, @Min(1) int durationInDays) { } }

接下来看一下方法和构造器的前置条件的声明:

传递给RentalStation构造器的name变量必须不能为空。当触发rentCar()方法的时候,customer变量必须不能为空,startDate也是不能为空,并且还是在未来的某个时间。最终,durationInDays必须最小为1。

注意到声明的方法或构造器本身不自动地触发他们的验证。相反,这个ExecutableValidator API一定会被用来执行这个校验。这种方法经常会用在方法拦截器工厂,例如AOP,代理对象等。

这些注解不仅可以应用在实例方法,等等,在静态方法上声明的注解也是支持的。依靠拦截功能用于触发方法校验,还有额外的限制,也可以应用在上面等等。对于方法的可见性,也支持作为拦截目标。

1.1 交叉参数约束

有时候校验不仅仅依靠一个单个参数,也可能是多个,或者是所有的一个方法或构造器的参数。这种需要就可以通过交叉参数约束满足。

交叉参数约束可以认为是一种方法校验,它等价于类级别的约束。两者都可以实现基于几个元素的校验的需要。类级别的约束,应用在bean的几个属性上,交叉参数约束应用在可执行的几个参数上。

相对于单参数约束,交叉参数约束可以声明在方法或构造器上,如下例:

public class Car { @LuggageCountMatchesPassengerCount(piecesOfLuggagePerPassenger = 2) public void load(List<Person> passengers, List<PieceOfLuggage> luggage) { } }

这里的交叉参数约束是@LuggageCountMatchesPassengerCount。它应用在方法load上,用来保证没有passenger有超过2个luggage。

最新回复(0)