hibernate.validator验证参数
前言
在接口开发中,经常是需要对传入参数完整性进行验证的,或者对手机号格式进行验证等,而一般不了解@Valid注解之前,都是通过自己封装方法来验证,都是一堆if else集合,这样判断对于代码结构很不友好,开发效率也不高,使用@Valid注解可以快速的对参数进行验证,并且可以通过抓取全局异常,从而实现统一返回
引用
@Valid是使用hibernate validation的时候使用,其中java的jsr303声明了这类接口,hibernate-validator对其进行了实现
在进行maven整合时,需要引入的依赖
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.0.13.Final</version>
</dependency>
复制代码
一般情况下早已被其他框架引入了,只是在不存在的时候需要进行引用一下,@Valid只是验证参数是否符合要求,但是具体参数需要符合什么要求,还是需要其他注解来标志验证规则
验证规则标签
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) 验证字符串长度是否在给定的范围之内
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=) 验证元素是否在合适的范围内
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
使用
在需要验证的类属性上添加相应的注解,如:
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;@Data
public class LoginVO {@NotBlankprivate String username;@NotBlankprivate String password;
}复制代码
在SpringMVC控制层中使用@Valid注解进行验证,并判断是否有异常
@PostMapping("login")
public String login(@Valid LoginVO vo, Errors errors){ if (errors.hasErrors()) {List<FieldError> list = errors.getFieldErrors();StringBuffer sb = new StringBuffer("参数:");for(FieldError error : list){sb.append(error.getField()).append(",");}sb.append("不符合要求");return sb.toString();}return "验证通过";
}复制代码
当然上面Controller层的代码非常容易重复,毕竟差不多的方法都需要验证参数,所以为了方面和简洁代码,可以通过抓取全局异常的方式返回提示信息
全局异常处理
通过配置全局异常处理方法,抓取BindException,返回异常提示信息
import com.wxkingbos.patrol.model.WebResult;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;/*** 全局异常处理器* Created by Raye on 2019-04-15*/
@ControllerAdvice
public class ExceptionControllerAdvice {@ExceptionHandler(BindException.class)@ResponseBodypublic String bindExceptionHandler(BindException ex){if(ex.hasErrors()){List<FieldError> list = ex.getFieldErrors();StringBuffer sb = new StringBuffer("参数:");for(FieldError error : list){sb.append(error.getField()).append(",");}sb.append("不符合要求");return sb.toString();}return ex.getMessage();}
}复制代码
同理,也可以采用此方法抓取其他全局异常,进行异常日志捕捉获取其他异常提示,另外以上全局异常配置只有在Springboot项目上运行过,因为现在项目差不多都是基于Springboot构建的了,所以也没有在非Springboot上面测试过可行性
以上内容转载自
https://raye.wang/springmvckuai-su-yan-zheng-can-shu-shi-fou-wan-zheng-valid/
注意 对象嵌套验证 只需要在对象的成员变量也加上@Valid
@Data
public class Pojo {@Validprivate Pojo2 pojo;
}
复制代码
转载于:https://juejin.im/post/5d54bebee51d4561f95eea23
hibernate.validator验证参数相关推荐
- Hibernate Validator JSR303示例教程
Hibernate Validator JSR303示例教程 欢迎使用Hibernate Validator示例教程.数据验证是任何应用程序的组成部分.您将使用Javascript在表示层找到数据验证 ...
- 如何优雅的做数据校验-Hibernate Validator详细使用说明
文章目录 Hibernate Validator的使用 依赖 bean约束声明和验证,Validator 方法约束声明和验证,ExecutableValidator 约束注解 空与非空检查 Boole ...
- hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别
Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...
- Hibernate Validator 6.0.13 声明和验证方法约束(Declaring and validating method constraints)
播放地址 13.解读Hibernate-Validator官方文档- 方法参数校验API http://v.youku.com/v_show/id_XMzk1Njg2Njg5Mg==.html 3. ...
- Springboot2参数校验: Hibernate Validator自定义注解
1.Hibernate Validator介绍 Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constrain ...
- SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑
SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...
- Springmvc的服务端数据验证-----Hibernate Validator
导入Hibernate validator的Jar包 hibernate-validator-4.3.0.Final.jar jboss-logging-3.1.0.CR2.jar validatio ...
- 【Spring】Spring hibernate JSR-303 Validator 自定义参数校验器
1.概述 在默认的情况下 Spring Boot 会引入关于 Hibernate Validator 机制来支持 JSR-303 验证规范:另外一方面 , 因为业务会 比较复杂,所以需要 自 定义验证 ...
- springboot使用hibernate validator校验
回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...
最新文章
- Hadoop运维记录系列(十二)
- ubuntu通过pem连接服务器
- Chrome报错:Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
- 自定义负载均衡策略:
- 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗
- dingo php,dingo 配置
- 初学者Git和GitHub简介(教程)
- tab栏的切换【DOM点击事件】
- TorchNet的学习笔记
- 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
- 什么是网关,网关的作用
- 钩子教程 - 原理(二十五) : 消息 -- WM_CANCELJOURNAL
- 跟着迪哥学python电子书pdf-跟着迪哥学Python数据分析与机器学习实战
- 项目管理第十章项目沟通管理
- raid0 trim linux,6系主板泪流满面,终于支持RAID 0模式下的TRIM了
- 一首记忆深刻的诗:《昭君出塞》
- QML 导入ttf图标库
- [转]NSIS常用代码整理
- 小程序引用公共js,不看可惜了!!
- R语言double数据转成numeric类型
热门文章
- mysql 存储过程实际应用,mysql 存储过程应用实例
- java验证码功能一般怎么做的_java制作简单验证码功能
- Linux下飞鸽传书项目设计书,Linux 下飞鸽传书设计实现
- java的constructor怎么用,constructor函数 Java中的构造函数Constructor怎么用
- c语言中++b与b++_C ++中的朋友功能
- easymock参数_EasyMock捕获参数
- testng_TestNG注释
- python入门指南_Python中的逻辑门–入门指南
- scala几种循环判断语句_Scala循环控制语句– while,while和for循环
- AngularJS自定义指令教程第2部分