hibernate validator】(三)声明和验证方法约束

这篇具有很好参考价值的文章主要介绍了hibernate validator】(三)声明和验证方法约束。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首发博客地址

https://blog.zysicyj.top/

一、声明方法约束

package org.hibernate.validator.referenceguide.chapter03.parameter;
public class RentalStation {
    public RentalStation(@NotNull String name) {
        //...
    }
    public void rentCar(
            @NotNull Customer customer,
            @NotNull @Future Date startDate,
            @Min(1)
 int durationInDays) 
{
        //...
    }
}
  1. RentalStation的name不能为空
  2. rentCar(),customer不能为空,startDate不能为空且必须在未来,durationInDays最少为1天

1. 交叉参数约束

public class Car {
    @LuggageCountMatchesPassengerCount(piecesOfLuggagePerPassenger = 2)
    public void load(List<Person> passengers, List<PieceOfLuggage> luggage) {
        //...
    }
}

该注解通过自动义确保乘客携带不超过2件行李

2. 返回值约束

package org.hibernate.validator.referenceguide.chapter03.returnvalue;
public class RentalStation {
    @ValidRentalStation
    public RentalStation() {
        //...
    }
    @NotNull
    @Size(min = 1)
    public List<@NotNull Customer> getCustomers() {
        //...
        return null;
    }
}
  • 任何新创建的 RentalStation对象必须满足 @ValidRentalStation约束
  • 传回的客户清单 getCustomers()不得为 null并且必须至少包含元素
  • 返回的客户清单 getCustomers()不得包含任何 null对象

3. 级联验证

package org.hibernate.validator.referenceguide.chapter03.cascaded;
public class Garage {
    @NotNull
    private String name;
    @Valid
    public Garage(String name) {
        this.name = name;
    }
    public boolean checkCar(@Valid @NotNull Car car) {
        //...
        return false;
    }
}
package org.hibernate.validator.referenceguide.chapter03.cascaded;
public class Car {
    @NotNull
    private String manufacturer;
    @NotNull
    @Size(min = 2, max = 14)
    private String licensePlate;
    public Car(String manufacturer, String licencePlate) {
        this.manufacturer = manufacturer;
        this.licensePlate = licencePlate;
    }
    //getters and setters ...
}
  1. 验证checkCar()方法的参数时,还将Car评估对所传递对象的属性的约束。同样,在验证构造函数的返回值时@NotNull,Garage将检查对name字段的约束 Garage。
  2. 通常,级联验证对可执行文件的工作方式与对JavaBeans属性完全相同。
  3. 特别是,null在级联验证期间会忽略值,并且递归执行级联验证
package org.hibernate.validator.referenceguide.chapter03.cascaded.containerelement;
public class Garage {
    public boolean checkCars(@NotNull List<@Valid Car> cars) {
        //...
        return false;
    }
}

4. 继承层次结构中的方法约束

  • 需要注意的规则
    • 方法的调用者必须满足的前提条件不能在子类型中得到加强
    • 保证方法调用者的后置条件不会在子类型中减弱
  • 子类非法的方法参数约束
package org.hibernate.validator.referenceguide.chapter03.inheritance.parameter;
public interface Vehicle {
    void drive(@Max(75) int speedInMph);
}
package org.hibernate.validator.referenceguide.chapter03.inheritance.parameter;
public class Car implements Vehicle {
    @Override
    public void drive(@Max(55) int speedInMph) {
        //...
    }
}
  • 次结构的并行类型中的非法方法参数约束
package org.hibernate.validator.referenceguide.chapter03.inheritance.parallel;
public interface Vehicle {
    void drive(@Max(75) int speedInMph);
}
package org.hibernate.validator.referenceguide.chapter03.inheritance.parallel;
public interface Car {
    void drive(int speedInMph);
}
package org.hibernate.validator.referenceguide.chapter03.inheritance.parallel;
public class RacingCar implements CarVehicle {
    @Override
    public void drive(int speedInMph) {
        //...
    }
}
  • 父类型和子类型方法的返回值约束
package org.hibernate.validator.referenceguide.chapter03.inheritance.returnvalue;
public interface Vehicle {
    @NotNull
    List<Person> getPassengers();
}
package org.hibernate.validator.referenceguide.chapter03.inheritance.returnvalue;
public class Car implements Vehicle {
    @Override
    @Size(min = 1)
    public List<Person> getPassengers() {
        //...
        return null;
    }
}

二、验证方法约束

再来一辆车

class Car2 {
    public Car2(@NotNull String manufacturer) {
    }
    @自定义规则
    public Car2() {
    }
    public void drive(@Max(75) @Min(22) int speedInMph) {
    }
    @Size(min = 1)
    public List getParams() {
        return null;
    }
}

获取工具

1. 校验普通方法参数

2. 测试普通方法返回值

3. 测试构造方法参数

4. 测试构造方法的返回值

三、内置方法约束

package org.hibernate.validator.referenceguide.chapter03.parameterscriptassert;
public class Car {
    @ParameterScriptAssert(lang = "javascript", script = "luggage.size() <= passengers.size() * 2")
    public void load(List<Person> passengers, List<PieceOfLuggage> luggage) {
        //...
    }
}
```        //...
    }
}

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-676142.html

到了这里,关于hibernate validator】(三)声明和验证方法约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 化繁为简,使用Hibernate Validator实现参数校验

    目录 前言 环境配置 导入依赖 基础校验 校验注解 参数绑定 @PathVariable @RequestParam @RequestBody @Validated @Valid 单参校验 对象校验 分组校验 顺序校验         在之前的悦享校园的开发中使用了SSM框架,由于当时并没有使用参数参数校验工具,方法的入参判断使用了大量的if else语

    2024年02月12日
    浏览(32)
  • Maven之hibernate-validator 高版本问题

    hibernate-validator 的高版本 (邮箱注解) 依赖于高版本的 el-api,tomcat 8 的 el-api 是 3.0,满足需要。但是 tomcat 7 的 el-api 只有 2.2,不满足其要求。 解决办法有 2 种: 低版本如 5.4.3.Final 在 tomcat7-maven-plugin 上可用。 使用 tomcat8-maven-plugin 。

    2024年02月11日
    浏览(25)
  • SpingBoot整合Swagger和Hibernate-Validate练习

    需求:用SpingBoot+Swagger+Hibernate-Validate集成一个demo,用Swagger查看Controller的接口文档。Swagger接口包括Controller的请求和返回,用Hibernate-Validate校验Controller的请求参数的合法性。目前只需要校验非空即可。 @NotBlank 只能注解String字符串类型 @NotNull可以注解在Integer类型 @EnableOpenApi

    2024年02月16日
    浏览(23)
  • golang validator v10 自定义验证方法和错误

    需要在初始化验证器时使用

    2024年02月09日
    浏览(37)
  • 关于Jquery的Validate插件--rules添加自定义方法(强密码验证方法)

    链接: https://www.runoob.com/jquery/jquery-plugin-validate.html Query Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求。该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用

    2024年02月08日
    浏览(30)
  • MATLAB中CVX工具箱解决凸优化问题的基本知识——语法、变量声明、目标函数、约束条件、cvx编程错误及解决方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文是在最近学习MATLAB CVX工具箱解决凸优化问题时学到的一些知识点,分享出来供大家参考。 进行CVX编程时,会遇到各种各样意想不到又难以解决的报错问题,如果编程过程中遇到了很多cvx bug和错误,

    2024年02月08日
    浏览(38)
  • Spring Boot使用 Hibernate-Validator校验参数时的长度校验

    今天在使用Validator框架数据验证的时候碰到了三个类似的注解,都是用来限制长度,但是用法上有区别:  @Size是一个Bean验证注释,用于验证关联的String具有的长度受最小值和最大值限制的值.  @Length是一个Hibernate特定的注释,与@Size具有相同的含义; 两者的区别: ​ 用@length限

    2024年02月14日
    浏览(33)
  • 一文学会sklearn中的交叉验证方法,cross_validate和KFlod实战案例

    在机器学习中,我们经常需要评估模型的性能。而为了准确评估模型的性能,我们需要使用一种有效的评估方法。五折交叉验证(5-fold cross-validation)就是其中一种常用的模型评估方法,用于评估机器学习模型的性能和泛化能力。 在本文中,我们将介绍五折交叉验证的原理和

    2024年02月13日
    浏览(39)
  • 【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

    请先看看下面代码:(简单举个例子,代码并不规范) 以上代码主要是为了对用户user实体进行条件验证。 但是那么多的if, 写得纯纯得小白一个,也使得代码显得臃肿不美观不优雅! 接下来,让我们学习使用优雅的参数验证@Validated! @Valid和@Validated是Spring Validation框架提供

    2024年02月02日
    浏览(30)
  • 深度学习:交叉验证(Cross Validation)

    首先,交叉验证的目的是为了让被评估的模型达到最优的泛化性能,找到使得模型泛化性能最优的超参值。在全部训练集上重新训练模型,并使用独立测试集对模型性能做出最终评价。 目前在一些论文里倒是没有特别强调这样的操作,很多研究使用的都是第一种:简单交叉验

    2024年02月02日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包