美文网首页
hibernate validator 属性验证依赖其他属性值

hibernate validator 属性验证依赖其他属性值

作者: 失眠孤独者 | 来源:发表于2021-04-29 16:44 被阅读0次

    先定义一个Person对象。

    @Data

    public class Person {

           @NotBlank(message = “年龄不能为空” )

    private Integer age; //年龄

    private String name;//姓名

    }

    需求如下:

    age <= 10 的时候不需要验证 name 为空。

    Age > 10 的时候需要验证 name 非空操作。

    这就涉及到动态添加验证功能。实现思路为动态的添加组来达到验证效果,这时候就需要用到 @GroupSequenceProvider 注解。

    官方文档链接:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_code_groupsequenceprovider_code

    解决方法如下:

    首先添加一个在Person定义一个组

    @Data

    public class Person {

           @NotBlank(message = “年龄不能为空” )

    private Integer age; //年龄

    public interface CheckNameGroup{}

    private String name;//姓名

    }

    其次定义一个provider:

    import org.hibernate.validator.spi.group.DefaultGroupSequenceProvider;

    import java.util.ArrayList;

    import java.util.List;

    public class PersonProvider implements DefaultGroupSequenceProvider<Person> {

        @Override

        public List> getValidationGroups(Person person) {

            List> defaultGroupSequence = new ArrayList<>();

            defaultGroupSequence.add(Person.class); //注意这里不要写错

            if (person != null) {

                Integer age = person();

                if (age >= 10) { //判断年龄,如果大于10,则添加此组来进行验证

                    defaultGroupSequence.add(CheckNameGroup.class);

                }

            }

            return defaultGroupSequence;

        }

    }

    最后在需要验证的Person类上添加@GroupSequenceProvider 注解

    @Data

    @GroupSequenceProvider(PersonProvider.class)

    public class Person {

           @NotBlank(message = “年龄不能为空” )

    private Integer age; //年龄

    public interface CheckNameGroup{}

    private String name;//姓名

    }

    至此,再通过hibernate validator 来进行验证的时候,就可以动态验证了。

    相关文章

      网友评论

          本文标题:hibernate validator 属性验证依赖其他属性值

          本文链接:https://www.haomeiwen.com/subject/kerwrltx.html