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);
        }
    }
}

总结

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

相关文章

  • Java 排序算法整合(冒泡,快速,希尔,拓扑,归并)

    Java 排序算法整合(冒泡,快速,希尔,拓扑,归并)

    这篇文章主要介绍了Java 排序算法整合(冒泡,快速,希尔,拓扑,归并),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Maven分步详解多环境配置与应用流程

    Maven分步详解多环境配置与应用流程

    这篇文章主要介绍了Maven进阶多环境配置与应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • java的引用类型的详细介绍

    java的引用类型的详细介绍

    在java中提供了4个级别的引用:强引用、软引用、弱引用、虚引用。其中强引用FinalReference是default个饰符来修饰,其它3个级别均为public修饰
    2013-10-10
  • java基于UDP实现图片群发功能

    java基于UDP实现图片群发功能

    这篇文章主要为大家详细介绍了java基于UDP实现图片群发功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • MyBatisPlus 一对多、多对一、多对多的完美解决方案

    MyBatisPlus 一对多、多对一、多对多的完美解决方案

    这篇文章主要介绍了MyBatisPlus 一对多、多对一、多对多的完美解决方案,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • JAVA SpringBoot统一日志处理原理详解

    JAVA SpringBoot统一日志处理原理详解

    这篇文章主要介绍了SpringBoot的统一日志处理原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • python实现高斯模糊及原理详解

    python实现高斯模糊及原理详解

    高斯模糊是一种常见的模糊技术,本文主要介绍了python实现高斯模糊及原理详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • SpringBatch数据写入实现

    SpringBatch数据写入实现

    Spring Batch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • RabbitMQ消息队列中多路复用Channel信道详解

    RabbitMQ消息队列中多路复用Channel信道详解

    这篇文章主要介绍了RabbitMQ消息队列中多路复用Channel信道详解,消息Message是指在应用间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象,需要的朋友可以参考下
    2023-08-08
  • jdk21环境配置详细步骤记录

    jdk21环境配置详细步骤记录

    JDK是整个Java开发的核心,它包含了Java的运行环境和Java工具,这篇文章主要给大家介绍了关于jdk21环境配置的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11

最新评论