前言

在接口开发中,经常是需要对传入参数完整性进行验证的,或者对手机号格式进行验证等,而一般不了解@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验证参数相关推荐

  1. Hibernate Validator JSR303示例教程

    Hibernate Validator JSR303示例教程 欢迎使用Hibernate Validator示例教程.数据验证是任何应用程序的组成部分.您将使用Javascript在表示层找到数据验证 ...

  2. 如何优雅的做数据校验-Hibernate Validator详细使用说明

    文章目录 Hibernate Validator的使用 依赖 bean约束声明和验证,Validator 方法约束声明和验证,ExecutableValidator 约束注解 空与非空检查 Boole ...

  3. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  4. Hibernate Validator 6.0.13 声明和验证方法约束(Declaring and validating method constraints)

    播放地址 13.解读Hibernate-Validator官方文档- 方法参数校验API http://v.youku.com/v_show/id_XMzk1Njg2Njg5Mg==.html 3. ...

  5. Springboot2参数校验: Hibernate Validator自定义注解

    1.Hibernate Validator介绍 Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constrain ...

  6. SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑

    SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...

  7. Springmvc的服务端数据验证-----Hibernate Validator

    导入Hibernate validator的Jar包 hibernate-validator-4.3.0.Final.jar jboss-logging-3.1.0.CR2.jar validatio ...

  8. 【Spring】Spring hibernate JSR-303 Validator 自定义参数校验器

    1.概述 在默认的情况下 Spring Boot 会引入关于 Hibernate Validator 机制来支持 JSR-303 验证规范:另外一方面 , 因为业务会 比较复杂,所以需要 自 定义验证 ...

  9. springboot使用hibernate validator校验

    回到顶部 一.参数校验 在开发中经常需要写一些字段校验的代码,比如字段非空,字段长度限制,邮箱格式验证等等,写这些与业务逻辑关系不大的代码个人感觉有两个麻烦: 验证代码繁琐,重复劳动 方法内代码显得冗 ...

最新文章

  1. Hadoop运维记录系列(十二)
  2. ubuntu通过pem连接服务器
  3. Chrome报错:Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
  4. 自定义负载均衡策略:
  5. 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗
  6. dingo php,dingo 配置
  7. 初学者Git和GitHub简介(教程)
  8. tab栏的切换【DOM点击事件】
  9. TorchNet的学习笔记
  10. 危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
  11. 什么是网关,网关的作用
  12. 钩子教程 - 原理(二十五) : 消息 -- WM_CANCELJOURNAL
  13. 跟着迪哥学python电子书pdf-跟着迪哥学Python数据分析与机器学习实战
  14. 项目管理第十章项目沟通管理
  15. raid0 trim linux,6系主板泪流满面,终于支持RAID 0模式下的TRIM了
  16. 一首记忆深刻的诗:《昭君出塞》
  17. QML 导入ttf图标库
  18. [转]NSIS常用代码整理
  19. 小程序引用公共js,不看可惜了!!
  20. R语言double数据转成numeric类型

热门文章

  1. mysql 存储过程实际应用,mysql 存储过程应用实例
  2. java验证码功能一般怎么做的_java制作简单验证码功能
  3. Linux下飞鸽传书项目设计书,Linux 下飞鸽传书设计实现
  4. java的constructor怎么用,constructor函数 Java中的构造函数Constructor怎么用
  5. c语言中++b与b++_C ++中的朋友功能
  6. easymock参数_EasyMock捕获参数
  7. testng_TestNG注释
  8. python入门指南_Python中的逻辑门–入门指南
  9. scala几种循环判断语句_Scala循环控制语句– while,while和for循环
  10. AngularJS自定义指令教程第2部分