hibernate validate 自定义对类的验证,可以同时验证几个字段的关联关系

最近开发接口,要求验证几个有关联的字段,但是在资料中,都是看到类似于@notnull,@notempty的注解,都是对单个字段,并不能满足我们平时开发的需求。

我们遇到的是,当选择某个字段时,另外一个字段不能为空,这样具有逻辑判断的验证,

1、在hibernate validation 中,提供了对类的注解。可以实现此需求

定义注解。

@Retention(RetentionPolicy.RUNTIME)
//element.type 注解用于类
@Target(ElementType.TYPE)
@Documented
@Constraint(validatedBy=BaseValAnno.class)
//@Repeatable(LinkVals.class)(可重复注解同一字段,或者类,java1.8后支持)
public @interface BaseVal {
String message() default "格式不正确";
Class[] groups() default {};
Class[] payload() default{};
}

2.对注解进行定义,继承 ConstraintValidator,接口,

hibernate validate 自定义对类的验证,可以同时验证几个字段的关联关系_第1张图片


3.自定义注解的使用。

/*

1、由于是对类的注解,所以存在的逻辑关系是先对属性验证,然后对类的逻辑关系验证,

2、@GroupSequence是对注解分组的排序,可以通脱他判断先后顺序

*/

@GroupSequence({first.class,second.class,third.class,fourth.class,BaseInfo.class})

@BaseVal(groups={fourth.class})
public class BaseInfo  {

//private int id;

@NotEmpty(message="年度不能为空",groups={first.class})
    private String niandu;

@NotEmpty(message="处罚主体不能为空",groups={first.class})
    private String areacode;



你可能感兴趣的:(java)