springboot異步處理@NotBlank或@NotNull注釋校驗(yàn)不生效問題
問題描述
在springboot中開啟異步后,再異步方法中使用service層方法進(jìn)行插入,如果開始了@NotBlank 或者@NotNull的時(shí)候,發(fā)現(xiàn)校驗(yàn)不生效。
解決方式
?實(shí)現(xiàn)方法:
@Data
public class A{
@NotBlank(message = "name不能為空")
private String name;
@NotBlank(message = "age")
private String age;
}
public class IAServiceImpl implements IAService {
//獲取校驗(yàn)的Bean
private final Validator validator;
public IAServiceImpl() {
this.validator = Validation.buildDefaultValidatorFactory().getValidator();
}
@Async
public void export(A a) {
//異步方式中調(diào)用A插入,失敗則可以獲取到message中的信息了
try{
insert(a)
}catch(Exception e){
logger.error("插入失?。?,e.getMessage())
}
}
@Override
public int insert(@Validated A a) {
//獲取校驗(yàn)
Set<ConstraintViolation<A>> violations = validator.validate(A);
if (!violations.isEmpty()) {
throw new RuntimeException(violations.iterator().next().getMessage());
} else {
return aMapper.insert(A);
}
}
}
擴(kuò)展:如何開啟分組校驗(yàn)
如果使用了分組校驗(yàn),則需要添加參數(shù)
實(shí)現(xiàn)方法:
@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 {
//獲取校驗(yàn)的Bean
private final Validator validator;
public IAServiceImpl() {
this.validator = Validation.buildDefaultValidatorFactory().getValidator();
}
@Async
public void export(A a) {
//異步方式中調(diào)用A插入,失敗則可以獲取到message中的信息了
try{
insert(a)
}catch(Exception e){
logger.error("插入失敗:",e.getMessage())
}
}
@Override
public int insert(@Validated A a) {
//獲取校驗(yàn) 開啟分組后這樣就只會(huì)校驗(yàn)插入分組的校驗(yàn)信息
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);
}
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot+React實(shí)現(xiàn)計(jì)算個(gè)人所得稅
本文將以個(gè)人所得稅的計(jì)算為例,使用React+SpringBoot+GcExcel來實(shí)現(xiàn)這一功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-09-09
Spring中的@CrossOrigin注解的使用詳細(xì)解讀
這篇文章主要介紹了Spring中的@CrossOrigin注解的使用詳細(xì)解讀,跨源資源共享(CORS),是由大多數(shù)瀏覽器實(shí)現(xiàn)的W3C規(guī)范,允許對(duì)跨域請(qǐng)求進(jìn)行靈活授權(quán),用來代替IFRAME或JSONP等非正規(guī)實(shí)現(xiàn)方式,需要的朋友可以參考下2023-11-11
Java實(shí)戰(zhàn)員工績(jī)效管理系統(tǒng)的實(shí)現(xiàn)流程
只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+Mysql+Maven+HTML實(shí)現(xiàn)一個(gè)員工績(jī)效管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01
帶你輕松搞定Java面向?qū)ο蟮木幊?-數(shù)組,集合框架
Java是面向?qū)ο蟮母呒?jí)編程語(yǔ)言,類和對(duì)象是 Java程序的構(gòu)成核心。圍繞著Java類和Java對(duì)象,有三大基本特性:封裝是Java 類的編寫規(guī)范、繼承是類與類之間聯(lián)系的一種形式、而多態(tài)為系統(tǒng)組件或模塊之間解耦提供了解決方案2021-06-06
Java多線程并發(fā)synchronized?關(guān)鍵字
這篇文章主要介紹了Java多線程并發(fā)synchronized?關(guān)鍵字,Java?在虛擬機(jī)層面提供了?synchronized?關(guān)鍵字供開發(fā)者快速實(shí)現(xiàn)互斥同步的重量級(jí)鎖來保障線程安全。2022-06-06
基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法(分享)
下面小編就為大家分享一篇基于紅黑樹插入操作原理及java實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Spring?中的切面與事務(wù)結(jié)合使用完整示例
本文給大家介紹Spring中的切面與事務(wù)結(jié)合使用完整示例,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2025-08-08

