Hibernate-validate工具类,手动调用校验返回结果
时间:2019-09-17
本文章向大家介绍Hibernate-validate工具类,手动调用校验返回结果,主要包括Hibernate-validate工具类,手动调用校验返回结果使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
引言:在常见的工程中,一般是在Controller中校验入参,校验入参的方式有多种,这里介绍的使用hibernate-validate来验证,其中分为手动和自动校验,自动校验可以联合spring,使用@Valid注解,以及 BindingResult类来自动收集消息,这里介绍的如何自动的,随时随地的调用工具类,校验指定类或注定属性是否符合规则,将错误封装。
1. 添加 hibernate-validate依赖
<!--hibernate validate--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency>
2. 接收处理结果,以及输出格式化的一个实体类
package com.stylefeng.guns.core.util; import org.apache.commons.lang3.StringUtils; import java.text.MessageFormat; import java.util.Map; /** * @author ztkj-hzb * @Date 2019/8/28 11:26 * @Description 实体校验结果 */ public class ValidationResult { /** * 是否有异常 */ private boolean hasErrors; /** * 异常消息记录 */ private Map<String, String> errorMsg; /** * 获取异常消息组装 * * @return */ public String getMessage() { if (errorMsg == null || errorMsg.isEmpty()) { return StringUtils.EMPTY; } StringBuilder message = new StringBuilder(); errorMsg.forEach((key, value) -> { message.append(MessageFormat.format("{0}:{1} \r\n", key, value)); }); return message.toString(); } public boolean isHasErrors() { return hasErrors; } public void setHasErrors(boolean hasErrors) { this.hasErrors = hasErrors; } public Map<String, String> getErrorMsg() { return errorMsg; } public void setErrorMsg(Map<String, String> errorMsg) { this.errorMsg = errorMsg; } @Override public String toString() { return "ValidationResult{" + "hasErrors=" + hasErrors + ", errorMsg=" + errorMsg + '}'; } }
3. 创建工具类,提供公共方法校验,返回结果
package com.stylefeng.guns.core.util; import org.apache.commons.collections.CollectionUtils; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.groups.Default; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @author ztkj-hzb * @Date 2019/8/28 11:21 * @Description 实体校验工具类 */ public class ValidateUtil { private ValidateUtil() { } /** * 验证器 */ private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); /** * 校验实体,返回实体所有属性的校验结果 * * @param obj * @param <T> * @return */ public static <T> ValidationResult validateEntity(T obj) { //解析校验结果 Set<ConstraintViolation<T>> validateSet = validator.validate(obj, Default.class); return buildValidationResult(validateSet); } /** * 校验指定实体的指定属性是否存在异常 * * @param obj * @param propertyName * @param <T> * @return */ public static <T> ValidationResult validateProperty(T obj, String propertyName) { Set<ConstraintViolation<T>> validateSet = validator.validateProperty(obj, propertyName, Default.class); return buildValidationResult(validateSet); } /** * 将异常结果封装返回 * * @param validateSet * @param <T> * @return */ private static <T> ValidationResult buildValidationResult(Set<ConstraintViolation<T>> validateSet) { ValidationResult validationResult = new ValidationResult(); if (CollectionUtils.isNotEmpty(validateSet)) { validationResult.setHasErrors(true); Map<String, String> errorMsgMap = new HashMap<>(); for (ConstraintViolation<T> constraintViolation : validateSet) { errorMsgMap.put(constraintViolation.getPropertyPath().toString(), constraintViolation.getMessage()); } validationResult.setErrorMsg(errorMsgMap); } return validationResult; } }
原文地址:https://www.cnblogs.com/duguxiaobiao/p/11533505.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊dubbo-go的metricsFilter
- 程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则
- 用CSS实现各种特殊效果
- 二分查找算法
- 一分钟学Python| Python的运算符 (上)
- JS开发必须知道的41个技巧【持续更新】
- PermissionX重磅更新,支持自定义权限提醒对话框
- 给Swagger换了个新皮肤,瞬间高大上了!
- 学习 | egg.js 中间件和插件
- Django template层之json报文遍历总结
- 015.Nginx重定向
- 明了 | MongoDB 外键的基本使用
- 优雅 | koa处理异常
- iOS开发之Context Menus
- 快速解释如何使用pandas的inplace参数