解決@Validated對List對象驗證失效問題
@Validated對List對象驗證失效
在實際開發(fā)中,常常會對接口api入?yún)⒆龈袷津炞C,有些入?yún)⑹荓ist數(shù)組對象。
public ApiResponse receiveManualTranscoding(@Validated @RequestBody List<SdZmDto> sdZmDtos)
其實這樣是失效的,會發(fā)現(xiàn)其SdZmDto并不會進(jìn)行驗證。
因為@Validated參數(shù)只能驗證單個對象。
解決方法1
手動對每一個參數(shù)對象進(jìn)行做驗證,但是代碼會顯得冗余
private ResultVo validate(@Valid SdZmDto gwbaDto) {
Set<ConstraintViolation<@Valid SdZmDto >> validateSet = Validation.buildDefaultValidatorFactory()
.getValidator()
.validate(gwbaDto);
if (!CollectionUtils.isEmpty(validateSet)) {
String messages = validateSet.stream()
.map(ConstraintViolation::getMessage)
.reduce((m1, m2) -> m1 + ";" + m2)
.orElse("參數(shù)輸入有誤!");
return ResultVo.builder().code(ResultConstants.FALSE).message(SYSTEM_ERROR_TSBAMESSAGE + messages).build();
}
return null;
}
解決方法2
定義一個對象,將list封裝進(jìn)行,則驗證就驗證單個對象了。
@Data
public class ValidList<E> implements List<E> {
@Valid
private List<E> list = new ArrayList<>();
}
將 public ApiResponse receiveManualTranscoding(@Validated @RequestBody List<SdZmDto> sdZmDtos)
改成
public ApiResponse receiveManualTranscoding(@Validated @RequestBody ValidList<SdZmDto> sdZmDtos)
選擇方案
解決方法1雖然冗余代碼,但是符合需求,如果采用方法2,則需要將請求的json參數(shù)進(jìn)行做調(diào)整。
@PostMapping("/receiveManualTranscoding")
@ResponseBody
public ApiResponse receiveManualTranscoding(@RequestBody List<SdZmDto> sdZmDtos) {
for(SdZmDto sdZmDto : sdZmDtos){
ApiResponse apiResponse = null;
if((apiResponse = validate(sdZmDto)) != null){
return apiResponse;
}
}
ajmApiService.receiveManualTranscoding(sdZmDtos);
return ApiDataResponse.ofSuccess();
}
private ApiResponse validate(@Valid SdZmDto sdZmDto) {
Set<ConstraintViolation<@Valid SdZmDto >> validateSet = Validation.buildDefaultValidatorFactory()
.getValidator()
.validate(sdZmDto);
if (!CollectionUtils.isEmpty(validateSet)) {
String messages = validateSet.stream()
.map(ConstraintViolation::getMessage)
.reduce((m1, m2) -> m1 + ";" + m2)
.orElse("參數(shù)輸入有誤!");
return ApiResponse.ofFail(messages);
}
return null;
}
```
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決JavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問題
下面小編就為大家?guī)硪黄鉀QJavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
Mac系統(tǒng)上安裝?JDK?8?最穩(wěn)最全教程(Homebrew?方式)
Homebrew是一個開源的包管理器,專為macOS(盡管也可以在Linux上使用)設(shè)計,用來簡化在Mac操作系統(tǒng)上安裝軟件的過程,這篇文章主要介紹了Mac系統(tǒng)上使用Homebrew方式安裝JDK8最穩(wěn)最全教程的相關(guān)資料,需要的朋友可以參考下2026-04-04
Mybatis實現(xiàn)動態(tài)SQL編寫詳細(xì)代碼示例
這篇文章主要為大家詳細(xì)介紹了Mybatis中動態(tài)SQL的編寫使用,動態(tài)SQL技術(shù)是一種根據(jù)特定條件動態(tài)拼裝SQL語句的功能,它存在的意義是為了解決拼接SQL語句字符串時的痛點(diǎn)問題,感興趣想要詳細(xì)了解可以參考下文2023-05-05
MyBatis 添加元數(shù)據(jù)自定義元素標(biāo)簽的實現(xiàn)代碼
這篇文章主要介紹了MyBatis 添加元數(shù)據(jù)自定義元素標(biāo)簽的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Android/Java中創(chuàng)建類實例的各種模式實例代碼
這篇文章主要介紹了Android/Java中創(chuàng)建類實例各種模式的相關(guān)資料,包括New關(guān)鍵字、靜態(tài)工廠方法、建造者模式、單例模式、依賴注入、抽象工廠模式、原型模式和Reflection,每個模式有其特點(diǎn)和適用場景,需要的朋友可以參考下2025-09-09
springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法
本篇文章主要介紹了springmvc學(xué)習(xí)筆記-返回json的日期格式問題的解決方法,解決了日期格式的輸出,有興趣的可以了解一下。2017-01-01

