Hibernate 验证框架validator
通常前端数据与后端交互CRUD都用到同一个类,那如何控制每一个操作类型的验证呢?多的不说了直接贴代码
1、依赖支持
<!-- hibernate 验证框架validator -->
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.1.5.Final</version>
</dependency>
2、通用类整理
public class ValidatorUtils {public static Validator validator(Boolean flag) {ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure()//failFast的意思只要出现校验失败的情况,就立即结束校验,不再进行后续的校验。.failFast(flag).buildValidatorFactory();return validatorFactory.getValidator();}/*** 功能描述:对象校验** @param obj 对象* @param classType 校验类型* @param flag 是否当出现一个属性错误就返回信息* @return java.lang.String* @date 2021/7/27*/public static <T> String getValidatorMessage(T obj, Class<?> classType, boolean flag) {Set<ConstraintViolation<Object>> validatorMessage = validator(flag).validate(obj, classType);return getSetMessage(new StringBuilder(), validatorMessage);}/*** 功能描述:属性校验(解决交互问题)** @param t 对象* @param classType 校验的类型* @param flag 是否当出现一个属性错误就返回信息* @param propertyNames 校验的属性* @return java.lang.String* @date 2021/7/27*/public static <T> String getValidatorMessage(T t, Class<?> classType, boolean flag, String... propertyNames) {StringBuilder stringBuilder = new StringBuilder();if (!ObjectUtils.isEmpty(propertyNames)) {for (String propertyName : propertyNames) {Set<ConstraintViolation<Object>> constraintViolations = validator(flag).validateProperty(t, propertyName, classType);getSetMessage(stringBuilder, constraintViolations);if (StringUtils.isNotBlank(stringBuilder.toString()) && propertyNames.length > 1) {stringBuilder.append(";");}if (StringUtils.isNotBlank(stringBuilder.toString()) && flag) {break;}}}return getErrorMessage(stringBuilder.toString());}/*** 功能描述:校验参数值** @param targetObject 目标对象* @param classType 校验类型* @param values 可变参数值* @return java.lang.String* @date 2021/7/27*/public static <T> String getValidatorMessage(Class<T> targetObject, Class<?> classType, String property, Object values) {StringBuilder stringBuilder = new StringBuilder();if (!ObjectUtils.isEmpty(property)) {Set<ConstraintViolation<T>> constraintViolations = validator(false).validateValue(targetObject, property, values, classType);getSetMessage(stringBuilder, constraintViolations);}return getErrorMessage(stringBuilder.toString());}/*** 功能描述:set集合处理** @param validatorMessage 校验失败信息* @return java.lang.String* @date 2021/7/27*/public static <T> String getSetMessage(StringBuilder stringBuilder, Set<ConstraintViolation<T>> validatorMessage) {if (!ObjectUtils.isEmpty(validatorMessage)) {String errorMessage = validatorMessage.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(";"));if (StringUtils.isNotBlank(errorMessage)) {stringBuilder.append(errorMessage);}}return stringBuilder.toString();}/*** 功能描述:去除最后一个;** @param errorMessage* @return java.lang.String* @date 2021/7/27*/private static String getErrorMessage(String errorMessage) {if (StringUtils.isNotBlank(errorMessage)) {if (errorMessage.indexOf(";") > 0) {errorMessage = errorMessage.substring(0, errorMessage.length() - 1);}}return errorMessage;}
3、创建自定义注解(标记作用)
这四个都一样
public @interface Add {}
4、在类中使用
注意(Query.class和Add.class是上面创建的自定义注解)
@Data
public class StudentDto {@NotBlank(message = "name不能为空",groups = {Query.class,Add.class})private String name;@NotNull(message = "age不能为空",groups = {Query.class})private Integer age;private String address;@NotNull(message = "birthday不能为空",groups = {Query.class})private String birthday;
}
5、使用案例
@PostMapping("/findOne")
public ResponseResult findOne(@RequestBody Student student){String validators = ValidatorUtils.getValidatorMessage(student, Query.class, false);if (StringUtils.isNotBlank(validators)){return ResponseResult.error(validators);}return ResponseResult.ok();
}@PostMapping("/findTwo")
public ResponseResult findTwo(@RequestBody Student student){String validators = ValidatorUtils.getValidatorMessage(student,Query.class,false,"name","age");if (StringUtils.isNotBlank(validators)){return ResponseResult.error(validators);}return ResponseResult.ok();
}@PostMapping("/findThree")
public ResponseResult findThree(@RequestBody Student student){String validators = ValidatorUtils.getValidatorMessage(student,Add.class,true,"name","age");if (StringUtils.isNotBlank(validators)){return ResponseResult.error(validators);}return ResponseResult.ok();
}@PostMapping("/findFour")
public ResponseResult findFour(@RequestBody Student student){String validators = ValidatorUtils.getValidatorMessage(student, Query.class, true);if (StringUtils.isNotBlank(validators)){return ResponseResult.error(validators);}return ResponseResult.ok();
}@GetMapping("/findFive")
public ResponseResult findFive(@RequestParam(value = "name")String name,@RequestParam(value = "age")String age){String validators = ValidatorUtils.getValidatorMessage(Student.class,Query.class,"name",name);if (StringUtils.isNotBlank(validators)){return ResponseResult.error(validators);}return ResponseResult.ok();
}
Hibernate 验证框架validator相关推荐
- hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别
Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...
- NHibernate.Validator 实体验证框架
在系统开发时,很多情况下都需要对实体进行验证,比如规定某个属性值不能为空,Email的格式或者电话号码的格式是否正确.这种验证不应该只在UI层进行,主要有以下几方面的考虑: 1.如果每个层次 ...
- .Net Validator验证框架 [ .Net | Validator Framework | Attribute ]
引: 具体地址忘记了,我是以前存在window live spaces 现在搬过来备份 (该文章在代码范例上有些说明不全,看附件来补充对 C# Attribute 的应用) 前言 简单易用是.Net ...
- jquery. Validator验证框架ajax返回json数据
今天在使用jquery. Validator验证框架的过程中遇到了一个这个的问题: 我需要动态的去验证注册邮箱是否已经存在了,所以需要用到ajax请求来解决该问题.但在使用该验证框架的ajax异步请求 ...
- Validator验证框架
5.4 Validator验证框架 Struts1.1及以上版本,在提供了动态ActionForm的同时,配合数据验证的需要,还提供了表单输入自动验证的功能,即使用Validator验证框架. ...
- SpringBoot-服务端参数验证-JSR-303验证框架
1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用. 比如: @RestController @RequestMapping("/h ...
- spring mvc + JSR-303验证框架
为什么80%的码农都做不了架构师?>>> http://www.cnblogs.com/liukemng/p/3738055.html 在系列(4).(5)中我们展示了如何绑定 ...
- JS验证框架的使用方法
今天着重介绍的是JS验证框架在Java Web项目中的应用, JSValidation要去http://cosoft.org.cn/projects/jsvalidation中下载最新版本. JSVa ...
- Android非空格式验证框架Validation的使用---第三方库学习笔记(四)
Validation简介: 这是一个简单的函数库,使用注释语法来验证用户输入的表单信息.你仅需编写几行代码就可以实现一些表单验证功能,且显示的所有视图都将反馈给用户.它还带有一个可扩展的在线验证选项, ...
最新文章
- Mac下sublime text2 解决中文乱码
- Current综述:中农宋春旭等为植物有益微生物组构建一个美好家园
- LeetCode 319. Bulb Switcher--C++,java,python 1行解法--数学题
- Postfix+Amavisd-new+Spamassassin+ClamAV整合安装
- android系统里面的mic是哪个app_苹果记事app哪个好用?这款便签可以跨系统使用...
- boost::mpi::wait_all相关用法的测试程序
- 模拟jquery链式访问
- Java基础教程:多线程基础(3)——阻塞队列
- 计算机专业专业课代号408,计算机专业考研你一定要知道的事情!
- Robocode教程4——Robocode的游戏物理
- Oracle 树操作、递归查询(select…start with…connect by…prior)
- Android 隐藏环形进度条,Android环形进度条
- 离散信号的希尔伯特变换的计算公式_离散信号的hilbert 变换.ppt
- 计算机中的云指的是什么,古语有云,古语有云中的云指的是什么
- Redis原生SET、SETNX、SETEX方法以及RedisTemplate的方法 + 分布式锁的实现
- 2020-04-15-52brain公众号目录【2020年3月】
- 【c51单片机】交通红绿灯设计
- mysql 入库乱码,如何解决mysql中文入库乱码问题
- 蚂蚁课堂视频笔记思维导图-3期 一、并发编程专题
- 华东师大计算机专硕学费,2021年华东师范大学硕士研究生学费标准公示
热门文章
- Nvidia-smi简介
- 【原创】【I2C】I2C介绍
- 删除 重复数据 mysql_mysql删除重复记录语句的方法
- Linux操作系统安装
- 中国教师研修网计算机培训心得体会,教师网络培训学习心得体会最新5篇精选...
- 欧洲通用数据保护条例(GDPR)合规的6个步骤
- (Note)HTTP常见状态码(Status Code)
- android 生成 QR_CODE 码 PFD_417码 CODE_36码
- 八大著名IT企业云计算策略(英文版)
- 锐捷客户端解除禁用多网卡设置(包括虚拟机和移动热点)