【问题标题】:Validation of one attribute with Hibernate validator使用 Hibernate 验证器验证一个属性
【发布时间】:2016-04-20 23:55:33
【问题描述】:

晚上好,我正在尝试在以下场景中使用 Hibernate Validator:

public class Car {

@NotNull
private String manufacturer;

@NotNull
@Size(min = 2, max = 14)
private String licensePlate;

@Min(2)
private int seatCount;

//setters and getters....
}

我正在尝试验证其属性如下:

public class CarMain {

public static Validator validator;
public static void main(String[] args) {
    ValidatorFactory factory = Validation. buildDefaultValidatorFactory() ;
    validator = factory. getValidator();
    Car car = new Car(null,null,0);
    Set<ConstraintViolation<Car>> st= validator.validate(car);
    while(st.iterator.hasNext()){
        ConstraintViolation<Car> cv = st.iterator.next();
        System.out.println("Value: ("+cv.getInvalidValue()+") -->"+cv.getMessage());
        System.out.println("Attribute: "+cv.getPropertyPath());
    }
}

此处验证整个实体,并显示带有验证消息和属性路径的无效值。

我的问题是:“是否可以使用 Hibernate Validator 一次仅验证一个属性?就像我不必使用整个对象来验证它一样。

【问题讨论】:

    标签: java validation constraints hibernate-validator


    【解决方案1】:

    Validator 接口还定义了一个 [Validator.validateProperty][1] 方法,您可以在其中显式指定要验证的属性。请注意,您仍然需要对象实例,并且需要知道要验证的属性。例如,此方法用于将 Bean Validation 集成到 JSF 中。在您的情况下使用它是否有意义,将取决于您的用例?为什么不想验证整个对象?

    顺便说一句,还有 Validator.validateValue 不需要实际的 bean 实例。

    【讨论】:

    • 我必须在一次只使用一个选定属性的算法中使用这个验证器,所以我不需要整个实例,非常感谢,还有一件事如果你愿意:不可能更改属性的约束,例如:@Min(2) 到 @Min(4) !!!除非我们改变了整个班级,对吗?或者还有什么我们可以做的吗?非常感谢您的回答对先生很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2016-12-17
    • 2012-09-29
    相关资源
    最近更新 更多