springboot异步处理@NotBlank或@NotNull注释校验不生效问题

 更新时间:2024年01月23日 08:39:25   作者:今天写bug了吗?  
这篇文章主要介绍了springboot异步处理@NotBlank或@NotNull注释校验不生效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

问题描述

 在springboot中开启异步后,再异步方法中使用service层方法进行插入,如果开始了@NotBlank 或者@NotNull的时候,发现校验不生效。

解决方式

​实现方法:

@Data
public class A{

    @NotBlank(message = "name不能为空")
    private String name;
    
    @NotBlank(message = "age")
    private String age;

    
}
public class IAServiceImpl implements IAService {
    
    //获取校验的Bean
    private final Validator validator;

    public IAServiceImpl() {
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
    
     @Async
    public void export(A a) {
        //异步方式中调用A插入,失败则可以获取到message中的信息了
        try{
           insert(a) 
        }catch(Exception e){
            logger.error("插入失败:",e.getMessage())
        }
        
    }
    
    @Override
    public int insert(@Validated A a) {
        //获取校验
        Set<ConstraintViolation<A>> violations = validator.validate(A);
        if (!violations.isEmpty()) {
            throw new RuntimeException(violations.iterator().next().getMessage());
        } else {
            return aMapper.insert(A);
        }
    }
}

扩展:如何开启分组校验

如果使用了分组校验,则需要添加参数

实现方法:

@Data
public class A{

    //定义插入接口
    public interface Insert {}

    public interface Update {}

    
    @NotBlank(message = "name不能为空", groups = {Insert.class})
    private String name;
    
    @NotBlank(message = "age",groups = {Update.class})
    private String age;

    
}
public class IAServiceImpl implements IAService {
    
    //获取校验的Bean
    private final Validator validator;

    public IAServiceImpl() {
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
    
     @Async
    public void export(A a) {
        //异步方式中调用A插入,失败则可以获取到message中的信息了
        try{
           insert(a) 
        }catch(Exception e){
            logger.error("插入失败:",e.getMessage())
        }
        
    }
    
    @Override
    public int insert(@Validated A a) {
        //获取校验 开启分组后这样就只会校验插入分组的校验信息
        Set<ConstraintViolation<A>> violations = validator.validate(A,A.Insert.class);
        if (!violations.isEmpty()) {
            throw new RuntimeException(violations.iterator().next().getMessage());
        } else {
            return aMapper.insert(A);
        }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot+React实现计算个人所得税

    SpringBoot+React实现计算个人所得税

    本文将以个人所得税的计算为例,使用React+SpringBoot+GcExcel来实现这一功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-09-09
  • 浅析Java中的继承与组合

    浅析Java中的继承与组合

    本文将介绍组合和继承的概念及区别,并从多方面分析在写代码时如何进行选择。文中通过示例代码介绍的很详细,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Spring中的@CrossOrigin注解的使用详细解读

    Spring中的@CrossOrigin注解的使用详细解读

    这篇文章主要介绍了Spring中的@CrossOrigin注解的使用详细解读,跨源资源共享(CORS),是由大多数浏览器实现的W3C规范,允许对跨域请求进行灵活授权,用来代替IFRAME或JSONP等非正规实现方式,需要的朋友可以参考下
    2023-11-11
  • Java实战员工绩效管理系统的实现流程

    Java实战员工绩效管理系统的实现流程

    只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+SSM+Mysql+Maven+HTML实现一个员工绩效管理系统,大家可以在过程中查缺补漏,提升水平
    2022-01-01
  • 带你轻松搞定Java面向对象的编程--数组,集合框架

    带你轻松搞定Java面向对象的编程--数组,集合框架

    Java是面向对象的高级编程语言,类和对象是 Java程序的构成核心。围绕着Java类和Java对象,有三大基本特性:封装是Java 类的编写规范、继承是类与类之间联系的一种形式、而多态为系统组件或模块之间解耦提供了解决方案
    2021-06-06
  • Java多线程并发synchronized 关键字

    Java多线程并发synchronized 关键字

    这篇文章主要介绍了Java多线程并发synchronized 关键字,Java 在虚拟机层面提供了 synchronized 关键字供开发者快速实现互斥同步的重量级锁来保障线程安全。
    2022-06-06
  • 基于红黑树插入操作原理及java实现方法(分享)

    基于红黑树插入操作原理及java实现方法(分享)

    下面小编就为大家分享一篇基于红黑树插入操作原理及java实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java中如何比较两个数组中元素是否相同

    Java中如何比较两个数组中元素是否相同

    比较两个数组中的元素是否相同,在项目中经常会使用到,下面与大家分享个最简单的方法
    2014-06-06
  • Java判断闰年的2种方法示例

    Java判断闰年的2种方法示例

    这篇文章主要给大家介绍了关于Java判断闰年的2种方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Spring 中的切面与事务结合使用完整示例

    Spring 中的切面与事务结合使用完整示例

    本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-08-08

最新评论