如何使用java validation api进行参数校验----Hibernate-Validation

在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。

1. Bean Validation 中内置的 constraint

注解                                      作用

@Valid 被注释的元素是一个对象,需要检查此对象的所有字段值
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式

2. Hibernate Validator 附加的 constraint
注解 作用
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=, max=) 被注释的元素必须在合适的范围内
@NotBlank 被注释的字符串的必须非空
@URL(protocol=,
host=,    port=, 
regexp=, flags=)
被注释的字符串必须是一个有效的url

@CreditCardNumber
被注释的字符串必须通过Luhn校验算法,
银行卡,信用卡等号码一般都用Luhn
计算合法性
@ScriptAssert
(lang=, script=, alias=)
要有Java Scripting API 即JSR 223 
("Scripting for the JavaTM Platform")的实现
@SafeHtml
(whitelistType=, 
additionalTags=)
classpath中要有jsoup包
hibernate补充的注解中,最后3个不常用,可忽略。

主要区分下@NotNull  @NotEmpty  @NotBlank 3个注解的区别:

@NotNull           任何对象的value不能为null

@NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null

@NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

举个使用的例子:

  1. public class User {

  2.  

  3.  

    @NotBlank

  4.  

    private String name;

  5.  

  6.  

    //年龄要大于18岁

  7.  

    @Min(18)

  8.  

    private int age;

  9.  

  10.  

    @Email

  11.  

    private String email;

  12.  

  13.  

    //嵌套验证

  14.  

    @Valid

  15.  

    private Product products;

  16.  

  17.  

    ... //省略getter,setter

  18.  

    }

  19.  

  20.  

    public class Product {

  21.  

  22.  

    @NotBlank

  23.  

    private String name;

  24.  

  25.  

    //价格在10元-50元之间

  26.  

    @Range(min=10,max=50)

  27.  

    private int price;

  28.  

  29.  

    ... //省略getter,setter

  30.  

    }

本人当时测试引入的依赖为:

    1. <dependency>

    2.  

      <groupId>org.hibernate</groupId>

    3.  

      <artifactId>hibernate-validator</artifactId>

    4.  

      <version>5.3.4.Final</version>

    5.  

      </dependency>

    6.  

      <dependency>

    7.  

      <groupId>javax.el</groupId>

    8.  

      <artifactId>javax.el-api</artifactId>

    9.  

      <version>2.2.4</version>

    10.  

      </dependency>

    11.  

      <dependency>

    12.  

      <groupId>org.glassfish.web</groupId>

    13.  

      <artifactId>javax.el</artifactId>

    14.  

      <version>2.2.4</version>

    15.  

      </dependency>

原文地址:https://www.cnblogs.com/matd/p/10737266.html

时间: 2024-08-29 06:14:16

如何使用java validation api进行参数校验----Hibernate-Validation的相关文章

API安全(五)-参数校验

1.为什么要做数据校验 要保证系统的安全性,健壮性,数据校验必不可少,校验参数的合法性,不能因为前端或者其它调用段因为参数传的不对导致我们的系统报错. 2.开发中参数校验做在哪里 一般都是做在接口层面,对传入的参数进行校验. 3.Bean Validation 对于Controller接口的参数校验,如果参数较少可以自己写代码进行校,但是如果参数较多,就会由一堆if-else,代码不美观.我们可以使用Bean Validation来进行参数校验,Bean Validation是一种Java规范,

Hibernate Validation使用示例及讲解

Hibernate Validation使用示例及讲解 时间 2015-01-10 11:02:14 ITeye-博客 原文 http://wdmcygah.iteye.com/blog/2174680 主题 Java 在项目开发过程中,后台在很多场景都需要进行校验操作,比如:前台表单提交到后台,系统接口调用,数据传输等等.而且很多项目都采用MVC分层式设计,每层还有需要进行相应地校验,这样在项目较大,多人协作开发的时候,会造成大量重复校验代码,且出错率高. 针对这个问题, JCP 出台一个 J

基于Java Bean Validation对Request参数进行校验的设计思路

摘自Hibernate Validator文档: 数据校验是任何一个应用程序都会用到的功能,无论是显示层还是持久层. 通常,相同的校验逻辑会分散在各个层中, 这样,不仅浪费了时间还会导致重复代码的发生. 为了避免重复, 开发人员经常会把这些校验逻辑直接写在领域模型里面, 但是这样又把领域模型代码和校验代码混杂在了一起, 而这些校验逻辑更应该是描述领域模型的元数据. JSR 303 - Bean Validation (version 1.1)- 为实体验证定义了元数据模型和API. 默认的元数据

Java参数验证Bean Validation 框架

1.为什么要做参数校验? 参数校验和业务逻辑代码分离,参数校验代码复用,统一参数校验方式.校验不太通过时统一异常描述. 2.bean validation规范 JSR303 规范(Bean Validation 规范)提供了对 Java EE 和 Java SE 中的 Java Bean 进行验证的方式.该规范主要使用注解的方式来实现对 Java Bean 的验证功能,并且这种方式会覆盖使用 XML 形式的验证描述符,从而使验证逻辑从业务代码中分离出来.JSR303注解如下: Hibernate

SpringBoot入门二十二,使用Validation进行参数校验

项目基本配置参考文章SpringBoot入门一,使用myEclipse新建一个SpringBoot项目,使用myEclipse新建一个SpringBoot项目即可,此示例springboot升级为2.2.1版本. 1. pom.xml添加aop支持 如果已经引用了spring-boot-starter-web,就不要需要引用spring-boot-starter-validation了,本例就不再引用 <!-- 引入validation支持 --> <dependency> <

Spring 进入Controller前参数校验

在进入Controller前完成参数的校验,针对对象参数 分为两个验证方式 (1)直接使用已定义的校验方式 1.在需要进行校验的属性上增加校验类型注解 import java.util.Date; import javax.validation.constraints.Past; import org.hibernate.validator.constraints.NotBlank; public class User { private String id; private String us

springmvc参数校验+统一异常处理

一.PathVariable 校验 在定义 Restful 风格的接口时,通常会采用 PathVariable 指定关键业务参数,如下: @GetMapping("/path/{group:[a-zA-Z0-9_]+}/{userid}") @ResponseBody public String path(@PathVariable("group") String group, @PathVariable("userid") Integer us

Struts2请求参数校验

校验的分类 客户端数据校验 和 服务器端数据校验 客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,通过Java代码 完成校验 struts2 支持校验方式 代码校验(用的很少) :在服务器端通过编写java代码,完成数据校验 配置校验(主流):XML配置校验(主流) 和 注解配置校验 代码校验请求参数 步骤一: 封装数据 步骤二: 实现校验Action ,必须继承ActionSupport 类 步骤三: 覆盖validate方法(val

Spring MVC 参数校验

转自:http://blog.csdn.net/eson_15/article/details/51725470 这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层