
JSR
莫迟疑
程序员
展开
-
Hibernate Validator 自定义注解及验证器
除了validation-api提供的标准注解,和hibernate-validator提供的扩展注解,我们也可以自定义注解,以实现特定的校验需求。下面将以基于自定义注解完成入参必须在指定枚举值范围内校验为例,讨论下怎么实现注解和验证器的自定义:自定义注解与普通注解相比,这种自定义注解需要增加元注解@Constraint,并通过validatedBy参数指定验证器。依据JSR规范,定义三个通用参数:message(校验失败保存信息)、groups(分组)和payload(负载)。自定义额外原创 2020-11-05 22:49:02 · 900 阅读 · 0 评论 -
Hibernate Validator 异常统一处理
每个Validation注解都有一个相同的配置参数message,用来定义校验失败抛出的异常信息。 Bean属性校验失败,Hibernate Validator抛出MethodArgumentNotValidException异常,示例如下:{ "timestamp": 1604281270618, "status": 400, "error": "Bad Request", "exception": "org.springframework.web.bind.Me.原创 2020-11-05 22:48:11 · 1932 阅读 · 0 评论 -
Hibernate Validator 可以校验Bean属性,也可以校验URL中的参数
在API调用中,有两种传参方式,一种以Bean的形式,另外一种以附加在URL上的形式。对于这两种传参方式,Hibernate Validator都可以提供校验能力,下面就依次说明它们分别如何处理。1.Bean在Bean的属性上添加注解,示例如下:@Datapublic class Department { @NotBlank private String name;}在Contoller层入参Bean上添加@org.springframework.validat原创 2020-11-05 22:47:01 · 633 阅读 · 0 评论 -
Hibernate Validator 校验集合内每个元素
通过在泛型上增加注解,Hibernate Validator可以校验集合内每个元素,以校验List内元素为例,示例代码如下package com.inspur.validator.model;import lombok.Data;import javax.validation.constraints.*;@Datapublic class Department { private Integer id; private List<@NotEmpty String&原创 2020-11-05 22:45:19 · 1764 阅读 · 0 评论 -
Hiberate Validator 嵌套Bean校验
如果在一个Bean里,嵌套了另一个Bean,这个Bean内的属性Hibernate Validator也是可以校验的,只需要在嵌套Bean上加上javax.validation.Valid注解就可以了,示例代码如下:package com.inspur.validator.model;import lombok.Data;import javax.validation.Valid;@Datapublic class Department { private Integer id;原创 2020-11-05 22:44:28 · 880 阅读 · 0 评论 -
Hibernate Validator 注解可重复添加
注解是可以重复添加到一个Bean属性上的,示例如下:@Length(min = 1, max = 10)@Length(min = 20, max = 30)private String name; 如上,name属性的长度会限制在两个范围之内[1, 10] & [20, 30],也还有另外一种写法:@Length.List({ @Length(min = 1, max = 10), @Length(min = 20, max = 30)})private St原创 2020-11-05 22:43:49 · 428 阅读 · 0 评论 -
Hibernate Validator中特殊的null值
如果入参值为null,注解通常不做校验。什么意思呢?举个栗子,你在一个Bean的name属性上加了@Length注解来校验名称长度:@Length(min = 1, max = 10)private String name; 但是入参name传了null,那么Hibernate Validator的校验结果是通过校验,为什么呢?我们看下源码就知道了。(实现校验逻辑的源码在hibernate-validator jar包,org.hibernate.validator.internal.cons原创 2020-11-05 22:42:33 · 791 阅读 · 0 评论 -
Hibernate Validator 6.0.17.Final 版本常用注解
Hibernate Validator是基于注解发挥作用的,下面是一个使用示例:package com.inspur.validator.model;import lombok.Data;import org.hibernate.validator.constraints.Length;import org.hibernate.validator.constraints.Range;import javax.validation.constraints.*;import java.util.原创 2020-11-05 22:41:01 · 780 阅读 · 0 评论 -
Hibernate Validator 的渊源
JSR是一种用于Bean校验的Java API规范,用于保证Bean校验符合特定标准。这个规范本身也在不断迭代,历史版本包括JSR303、JSR349以及JSR380。本文基于JSR380版本进行讨论。 依据JSR规范,Validation Api定义了一系列标准接口,Hibernate Validator则实现并扩展了这些接口。以下为JSR的每个版本和Validation Api版本的对应关系:JSR版本别名Validation Api版本JSR303Bean Valid原创 2020-11-05 22:35:24 · 139 阅读 · 0 评论