• hibernate_validator_04


    对象图--个人觉得就是关联验证

    ean Validation API不仅能够用来校验单个的实例对象,还能够用来校验完整的对象图.要使用这
    个功能,只需要在一个有关联关系的字段或者属性上标注 @Valid . 这样,如果一个对象被校验,那么
    它的所有的标注了 @Valid 的关联对象都会被校验.

    例:

    Person类

    package com.mycompany;
    import javax.validation.constraints.NotNull;
    public class Person {
    @NotNull
    private String name;
    public Person(String name) {
    super();
    this.name = name;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    }
    View Code

    Car类(有一个属性是Person类

    package com.mycompany;
    import javax.validation.Valid;
    import javax.validation.constraints.NotNull;
    public class Car {
    @NotNull
    @Valid
    private Person driver;
    public Car(Person driver) {
    this.driver = driver;
    }
    //getters and setters ...
    }
    View Code

    如果校验 Car 的实例对象的话,因为它的driver属性标注了 @Valid , 那么关联的 Person 也会被校验.
    所以,如果对象 Person 的name属性如果是 null 的话,那么校验会失败.
    关联校验也适用于集合类型的字段, 也就是说,任何下列的类型:
    •数组
    •实现了 java.lang.Iterable 接口( 例如 Collection ,  List 和  Set )
    •实现了 java.util.Map 接口
    如果标注了 @Valid , 那么当主对象被校验的时候,这些集合对象中的元素都会被校验.

    下面可以用Car with a list of passengers的例子

    package com.mycompany;
    import java.util.ArrayList;
    import java.util.List;
    import javax.validation.Valid;
    import javax.validation.constraints.NotNull;
    public class Car {
    @NotNull
    @Valid
    private List<Person> passengers = new ArrayList<Person>();
    public Car(List<Person> passengers) {
    this.passengers = passengers;
    }
    //getters and setters ...
    }
    View Code

    当校验一个 Car 的实例的时候,如果passengers list中包含的任何一个 Person 对象没有名字的话(因为对应的Person类中对其属性进行了验证),都
    会导致校验失败(a  ConstraintValidation will be created).

    注意:对象图校验的时候是会被忽略 null 值的(对于这句话,英文上的文献为null values are getting ignored when validating object graphs这句话要表达的意思个人没明白但是在上面car类中有一个Person的例子中,不管是对应的person实例为Null还是person实例中的name为null都是验证有误的)

  • 相关阅读:
    【五】服务熔断、降级 —— Hystrix(豪猪)
    32. Springboot 系列(八)动态Banner与图片转字符图案的手动实现
    31.【微服务架构】SpringCloud之Feign(五)
    新SQL temp
    lombok踩坑与思考
    lombok注解介绍
    叉乘实现角色和敌人的位置判断(左上,左下,右上,右下)
    2维,3维向量单位化
    2个2D向量计算交点的夹角和补角
    Unity编辑器-创建单独编辑框,折叠框,提示框
  • 原文地址:https://www.cnblogs.com/wangyang108/p/5665145.html
Copyright © 2020-2023  润新知