日常Java开发中,我们使用validate的校验是很方便的,但是也有一些特殊情况需要单独处理,

例如:导入Excel校验,传入的是MultipartFile文件类型,我们不能使用注解进行校验实体信息,只能通过先解析成实体类然后进行校验,此时已经到了方法里面,不能使用校验注解来处理了,我们应该如何处理这类情况呢?

一般情况下,我们校验用的@Validated或者@Valid注解是直接在controller中添加,

然后全局异常处理 @RestControllerAdvice 中 进行拦截处理并返回所需校验提示信息。

但是,如果在方法Service中如何使用validate方法校验呢,加注解是不能生效的,因为源码没有直接这样处理。

不过,我们可以使用源码提供的ValidatorFactory工厂的Validator校验器的validate方法。

import lombok.experimental.UtilityClass;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.validator.HibernateValidator;import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.List;
import java.util.Set;/*** validate方法中校验工具类* <p>* 只要在实体中加上相应的validate的相关注解即可* </p>** @author Zed*/
@UtilityClass
public class ValidateTools {/*** 初始化检查器*/private static final ValidatorFactory VALIDATOR_FACTORY = Validation.byProvider(HibernateValidator.class).configure().failFast(false).buildValidatorFactory();private static final Validator VALIDATOR = VALIDATOR_FACTORY.getValidator();/*** 校验返回异常信息** @param t   实体* @param <T> 实体泛型*/public static <T> String validStr(T t) {// 构造返回信息StringBuilder validMessage = new StringBuilder();// 检查实体TSet<ConstraintViolation<T>> set = VALIDATOR.validate(t);// 循环set,获取检查结果for (ConstraintViolation<T> vo : set) {validMessage.append(vo.getMessage()).append(";");}return validMessage.toString();}/*** 校验实体抛出异常** @param t   实体* @param <T> 实体泛型*/public static <T> void valid(T t) {String validStr = validStr(t);// 抛出业务异常if (StringUtils.isNotBlank(validStr)) {throw new BusinessException(validStr);}}/*** 校验集合抛出异常** @param list 列表* @param <T>  实体泛型*/public static <T> void valid(List<T> list) {if (CollectionUtils.isEmpty(list)) {throw new BusinessException("数据不存在!");}// 构造返回信息StringBuilder validMessageTotal = new StringBuilder();// 遍历for (int i = 0; i < list.size(); i++) {String validStr = validStr(list.get(i));if (StringUtils.isNotBlank(validStr)) {String msg = String.format("第%d条数据校验结果:[%s]\n", i + 1, validStr);validMessageTotal.append(msg);}}// 抛出业务异常if (StringUtils.isNotBlank(validMessageTotal.toString())) {throw new BusinessException(validMessageTotal.toString());}}}
复制代码

BusinessException是自己定义的业务异常类,然后在全局异常处理中增加这个异常拦截就行了。

仅供参考,实际开发请仔细测试找出合适的解决办法。

validate方法中校验工具类相关推荐

  1. SpringBoot中使用Hibernate Validator校验工具类

    1.说明 在Spring Boot已经集成Hibernate Validator校验器的情况下, 对于配置了校验注解的请求参数, 框架会自动校验其参数, 但是如果想手动校验一个加了注解的普通对象, 比 ...

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

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

  3. java身份证号码校验工具类

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

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

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

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

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

  6. Java身份证校验工具类

    Java身份证校验工具类 工作中经常会涉及到身份证的校验,而且需求不同,有的需要校验最后一位校验位,有的不需要,这里参考了几篇文章及自己工作中用到的情况写了一个工具类.记录一下,菜鸟一个,大佬勿喷. ...

  7. hutool中Convert工具类的常用方法

    hutool中Convert工具类的常用方法 方法都是public static,以下省略不写. 1.String numberToChinese(double number, boolean isU ...

  8. Java正则表达式校验工具类_【Java工具类】----正则表达式校验工具类

    /** * @Title: RegexValidateUtil.java * @Package org.csun.nc.util * @Description: TODO * @author chis ...

  9. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法中访问 Groovy 类、方法、字段、属性 | 完整代码示例及进行编译时处理的编译过程 )

    文章目录 一.ASTTransformation#visit 方法中访问 Groovy 类.方法.字段.属性 二.完整代码示例及进行编译时处理的编译过程 1.Groovy 脚本 Groovy.groo ...

最新文章

  1. NOI2015 程序自动分析
  2. Java后端学习路线6大维度详细总结(编程基础+开发工具+应用框架+运维知识+成神之路+平稳降落)【可作为知识点梳理列表】【点击可查看高清原图】
  3. css中实现ul两端的li对齐外面边缘
  4. unity实现图片轮播效果_Unity3D实现列表拖拽轮播分页滚动功能
  5. Linux服务器的架设 (DHCP,NIS,SAMBA,FTP,DNS)
  6. 丢失api-ms-win-crt-runtime-l1-1-0.dll
  7. 学习ASP.NET Core,怎能不了解请求处理管道[1]: 中间件究竟是个什么东西?
  8. win10 解决升级 WordPress 时提示”另一更新正在进行”
  9. NAR丨方海发布免疫疾病遗传靶点数据库“优先指数”,助力计算转化医学研究...
  10. QQ消息支持HTML吗,WebQQ全面升级支持IE9 HTML5无处不在
  11. xgboost算法_xgboost算法学习心得
  12. rtlab matlab版本,电力电子技术教学中电力仿真软件选择与应用.doc
  13. 如何将WebRoot部署到tomcat中
  14. oracle数据库alter table,oracle 数据库 alter table的用法(经典)
  15. 2021-09-10ESSM, CVR预估到底要预估什么
  16. RTX30 系列游戏本与台式机、云服务器显卡 AI 计算力对比
  17. z-blogPHP清爽格子纹理主题调整风格
  18. Go/Goland 开发笔记
  19. 红黑树 原理和算法详细介绍(Java)
  20. 淘宝客 WebView打开淘宝链接失败的解决方法

热门文章

  1. 软件开发之版本控制方式
  2. 一、Blender的基础操作
  3. 常见DDOS攻击原理
  4. win10鼠标右键恢复
  5. Total Commander配置详解
  6. 规范数据处理活动,保障数据安全,促进数据开发利用——《数据安全法》解读
  7. 计算机密码阈值,帐户锁定阈值 (Windows 10) - Windows security | Microsoft Docs
  8. 银行智能风险防控系统(第二版)
  9. 【Windows】取消某种格式文件默认的打开方式
  10. 【总结】利用AWS实现高可用性和云灾备