1.说明

在Spring Boot已经集成Hibernate Validator校验器的情况下,
对于配置了校验注解的请求参数,
框架会自动校验其参数,
但是如果想手动校验一个加了注解的普通对象,
比如从文件中解析出来的对象,
或者自己新建的对象,
可以使用如下工具类对其进行校验。

2.工具类

通过Spring上下文获取容器中的Validator,
然后注入到本地静态变量中,
用于后续的对象校验,
ValidatorUtil.java源码:

package com.ai.ipc.resource.util;import java.util.Set;import javax.validation.ConstraintViolation;
import javax.validation.ValidationException;
import javax.validation.Validator;import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.validation.beanvalidation.SpringValidatorAdapter;/*** Hibernate Validator校验工具类*/
@Component
public class ValidatorUtil implements ApplicationContextAware {// 通过Spring获得校验器private static Validator validator;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) {Validator validatorBean = applicationContext.getBean(Validator.class);setValidator(validatorBean);}public static void setValidator(Validator validatorBean) {// Unwrap to the native Validator with forExecutables supportif (validatorBean instanceof LocalValidatorFactoryBean) {validator = ((LocalValidatorFactoryBean) validatorBean).getValidator();} else if (validatorBean instanceof SpringValidatorAdapter) {validator = validatorBean.unwrap(Validator.class);} else {validator = validatorBean;}}/*** 对配置了注解的对象进行校验*/public static <T> void validate(T object) {Set<ConstraintViolation<T>> violationSet = validator.validate(object);for (ConstraintViolation<T> violation : violationSet) {// 快速返回第一个校验失败的数据throw new ValidationException(violation.getMessage());}}
}

3.使用方式

在如下Junit测试用例中,
新建了Device对象的实例,
然后用ValidatorUtil对其进行校验,
如果参数不满足校验注解,
会抛出对应的校验异常:

package com.ai.ipc.util;import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import com.ai.ipc.resource.ResourceApplication;
import com.ai.ipc.resource.util.ValidatorUtil;@SpringBootTest(classes = ResourceApplication.class)
public class ValidatorUtilTest {@Testpublic void testValidateBean() {Device device = new Device();device.deviceId = "d001";device.ip = "1.1.1.1";device.name = "12345";ValidatorUtil.validate(device);}public class Device {/*** 设备ID*/@NotNull(message = "deviceId不能为Null")private String deviceId;/*** 设备IP,业务主键,建立唯一索引约束,不支持修改*/@NotEmpty(message = "IP不能为空")private String ip;/*** 设备名称*/@Size(min = 1, max = 3, message = "name的长度size在[1,3]之间")private String name;}}

4.异常日志

上面测试代码填写的name长度为5,
发生异常时的日志如下:

javax.validation.ValidationException: name的长度size在[1,3]之间at com.ai.ipc.resource.util.ValidatorUtil.validate(ValidatorUtil.java:51)at com.ai.ipc.util.ValidatorUtilTest.testValidateBean(ValidatorUtilTest.java:26)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)

http://www.taodudu.cc/news/show-1250925.html

相关文章:

  • 28. 对称的二叉树
  • 解决tomcat的undeploy
  • 解决eclipse出现The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  • 下载安装neo4j
  • vue-drag-resize实线页面的拖拽与缩放
  • 解决IDEA不能编译XML文件
  • 播放视频和音频文件java
  • 实时获取屏幕大小
  • vue部分样式无法修改
  • vue中根据搜索内容跳转到页面指定位置
  • Duplicate entry ‘‘ for key ‘***‘
  • transferto遇到的问题java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp
  • Spring的jar包下载
  • *** is required and cannot be removed from the server
  • Tomcat 服务器介绍和使用
  • 第一个 Web 程序
  • Servlet 介绍
  • 集成 Tomcat、 Servlet 的生命周期
  • Request 对象、重定向、请求转发
  • Cookie 学习
  • ServletContext对象、ServletConfig对象
  • sevlet中web.xml 文件
  • 过滤器、监听器
  • El 表达式、jstl学习
  • cookie与session详解、url地址重写
  • 命名规范、MVC 开发模式
  • MyBatis 简介、 环境搭建、数据库连接池、查询方式
  • 注解、路径、 Log4J、<settings>标签
  • parameterType 属性、typeAliases 别名
  • MyBatis 实现增删CRUD

SpringBoot中使用Hibernate Validator校验工具类相关推荐

  1. SpringBoot中操作spring redis的工具类

    场景 SpringBoot+Vue+Redis实现前后端分离的字典缓存机制: https://blog.csdn.net/badao_liumang_qizhi/article/details/108 ...

  2. Spring Boot中自带的这些工具类,你用过几个?

    最近发现同事写了不少重复的工具类,发现其中很多功能,Spring 自带的都有.于是整理了本文,希望能够帮助到大家! 断言 断言是一个逻辑判断,用于检查不应该发生的情况 Assert 关键字在 JDK1 ...

  3. SpringBoot 那些自带 Buff 的工具类,你用过几个?

    今日推荐 推荐一个 Java 接口快速开发框架干掉Random:这个类已经成为获取随机数的王者Docker + Intellij IDEA,提升 10 倍生产力!笑出腹肌的注释,都是被代码耽误的诗人! ...

  4. validate方法中校验工具类

    日常Java开发中,我们使用validate的校验是很方便的,但是也有一些特殊情况需要单独处理, 例如:导入Excel校验,传入的是MultipartFile文件类型,我们不能使用注解进行校验实体信息 ...

  5. springboot使用hibernate validator校验

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

  6. SpringBoot 文件上传 基于MD5 文件内容校验工具类

    1.业务场景:实现文件上传功能时.我们需要校验上传文件在传输过程中是否被注入脚本或者是被修改,所有采用md5 算法+ 文件内容生成一个识别码,传递给后端,让后端判断文件是否发生修改或变更. impor ...

  7. Springboot中优雅进行字段校验

    欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...

  8. 生成sign(签名),以及校验工具类

    生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...

  9. 组织机构代码和统一社会信用代码校验规则以及java校验工具类

    组织机构代码 编码规则编辑 1.全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成. 本体代码采用系列(即分区段)顺序编码方法. 校验码按照以下公式计算: C9 ...

最新文章

  1. linux nmon
  2. IOS的消息传递机制,使用NSNotificationCenter进行通信,很实用
  3. mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace
  4. 复利计算--结对1.0,做汉堡,结对2.0
  5. java计时器工作方法,java-摆动计时器如何工作?
  6. VMware pro 15 ubuntu简易安装虚拟机黑屏
  7. SQA计划和验收测试规程设计
  8. “滤镜景点”太坑遭吐槽!小红书致歉:将推出景区踩坑榜
  9. javascript基础:Math对象
  10. 如何在代码里打开Android手机通知状态栏
  11. javascript模板插件amaze.js
  12. 奥奇手游怎么显示部分服务器,奥奇传说手游区服互通吗
  13. 动态路由ospf、DR和BDR
  14. 从零入门机器学习之开宗明义:编程与数据思维
  15. Android简单实现计时和倒计时
  16. [NOIP 模拟]疫情延迟 二分+Spfa
  17. 这应该是我见过最好的机房监控解决方案了!
  18. JDBC的传统连接弊端
  19. oracle 11.2.0 oci,PHP安装oracle的php_oci和oci8扩展
  20. 在Ubuntu上安装hadoop(截图太多,干脆来个大截图)

热门文章

  1. Django使用问题记录
  2. Python入门学习-DAY27- isinstance与issubclass、反射、内置方法
  3. Java之美[从菜鸟到高手演变]之Spring源码学习 - 环境搭建
  4. MongoDB之Java测试代码(DAO层)
  5. poj 3083 Children of the Candy Corn(bfs+dfs 数组模拟方向)
  6. [HTTP] HTTP协议基础及发展历史
  7. 关于table的用法(二)
  8. JS 基础知识点及常考面试题(一)
  9. CSS3新增-属性(长度颜色背景)选择器-盒子模型
  10. vue 3.x 中全局配置 axios