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

先定义一个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 {

    @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 属性验证依赖其他属性值)