@Validated 根據字段的值不同,動態分組校驗

@GroupSequenceProvider 配置

作用域只在單個對象的字段里

@Data
@GroupSequenceProvider(value = TestProvider.class)
public class TestRO {@NotNull(message = "不能為空",groups = ValidatedRemark.A.class)@Pattern(regexp ="2|3|",message = "只能為2,3,空",groups = ValidatedRemark.B.class)private  String str;

控制層

    @PostMapping("/test")@ApiOperation("測試請求")public AjaxResult test(@RequestBody @Validated TestRO ro){

根據字段的值分配校驗的順序

import java.util.ArrayList;
import java.util.List;public class TestProvider implements DefaultGroupSequenceProvider<TestRO> {@Overridepublic List<Class<?>> getValidationGroups(TestRO ro) {List<Class<?>> defaultGroupSequence = new ArrayList<>();defaultGroupSequence.add(TestRO.class);if (null==ro) {return defaultGroupSequence;}String xxxType = ro.getXxx();
//判斷的業務邏輯if (ro != null && StringUtils.isNotEmpty(xxxType ) ) {if (A.equals(xxxType )) {defaultGroupSequence.add(ValidatedRemark.A.class);}else if(B.equals(xxxType )){defaultGroupSequence.add(ValidatedRemark.B.class);}}return defaultGroupSequence;}
}

注意事項

如果還包含其他對象,需要對每個對象都加上 @GroupSequenceProvider 和對應的 Provider類

可以加上AOP 把要判斷的字段值賦 傳遞給 包含的其他對象

也可以對這個字段加上必填校驗,讓前端傳值

也可以前面加上非空判斷,包含其他對象的對應的 Provider類里加上非空判斷就走 分組校驗

    @Valid@NotNull(message = "ddd不能為空",groups = ValidatedRemark.A.class)private Dddd ddd;@NotNull(message = "list不能為空",groups = ValidatedRemark.A.class)@Size(min = 1,message = "list里至少一個對象",groups = ValidatedRemark.A.class)private List<@Valid Cccc> ccccList;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40797.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue2使用use注冊自定義指令實現權限控制

版本環境 vue的版本是^2.6.12&#xff0c;將會使用到Vue.use()、Vue.directive() 適用環境 頁面某些按鈕&#xff0c;需要受到當前登錄用戶的“角色”“權限”的影響&#xff0c;通過store獲取角色role和權限permission&#xff0c;通過自定義指令的方式&#xff0c;控制某一…

antd DatePicker日期選擇框限制最多選擇一年

實現效果 實現邏輯 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

Appium自動化測試框架1

電腦的瀏覽器 手機的瀏覽器 手機上的app 原生的應用 純java 手機上的app apk 移動網頁應用 純HTML CSS 手機的瀏覽器上 電腦的瀏覽器上 混合應用 java html css python代碼 Appium python庫 Appium 手機 都是代表本機 0.0.0.0 127.0.0.1 localhost 如何啟動app 啟動參…

土壤養分化驗儀:農業生態與可持續發展

隨著現代農業技術的不斷進步&#xff0c;土壤養分化驗儀在農業生產中扮演著越來越重要的角色。這款高科技設備以其高精度、高效率的特點&#xff0c;為農業生態與可持續發展提供了強有力的支撐。 一、農田土壤監測與管理 農田是土壤養分化驗儀最主要的應用場所。通過對農田土壤…

【AI】DeepStream(14):圖像分割deepstream-segmentation-test示例演示

【AI】AI學習目錄匯總 1、簡介 deepstream-segmentation-test示例演示了圖像的語義分割。兩個配置文件,分別加載U-Net和Res-UNet兩種分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一個在生物醫學圖像分割領域廣泛應用的卷積神經網絡(CNN),…

集團型企業組織架構復雜,業務線多,如何進行高效費用管控?

企業管理中流行這樣一句話&#xff1a;“企業轉型&#xff0c;財務先行”。對集團型企業而言&#xff0c;當今的發展形勢下&#xff0c;通過財務戰略全面轉型、最終撬動企業價值提升&#xff0c;是一件難而正確的事情。 集團企業具有經營規模大、產業鏈多、分支機構多、地域跨度…

地下電子標識器探測儀ED8000選型注意事項

ED8000探測儀是一臺集成了多頻率、多種ID標識器調制模式、高低靈敏度調節、可讀寫標識器等全功能、高性能電子標識器探測儀。它有著極高的靈敏度,同時具備良好的噪聲抑制能力&#xff0c;不僅適合專業測繪人員&#xff0c;普通操作人員也可以輕松掌握。 ED8000可支持模擬電子標…

洛谷 P1042 [NOIP2003 普及組] 乒乓球

洛谷 P1042 [NOIP2003 普及組] 乒乓球 題目背景 國際乒聯現在主席沙拉拉自從上任以來就立志于推行一系列改革&#xff0c;以推動乒乓球運動在全球的普及。其中 11 11 11 分制改革引起了很大的爭議&#xff0c;有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位…

2024亞洲國際餐飲展覽會(北京餐飲展|火鍋展|預制菜展會)

2024北京餐飲展會&#xff0c;2024北京食材展會&#xff0c;2024北京火鍋展會&#xff0c;2024北京火鍋食材展會&#xff0c;2024北京預制菜展會&#xff0c;2024北京預制食材展會&#xff0c; 2024亞洲國際餐飲展覽會&#xff08;北京餐飲展|火鍋展|預制菜展會&#xff09; …

【C語言】刷題筆記 Day2

【筆記】 【1】局部變量不初始化&#xff0c;默認放的隨機值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】這里雖然輸入的是一個浮點數&#xff0c;但是只取整數部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多組輸入&#xff0c;保存和不保存…

基于 Windows Server 2019 部署域控服務器

文章目錄 前言1. 域控服務器設計規劃2. 安裝部署域控服務器2.1. 添加 Active Directory 域服務2.2. 將服務器提升為域控制器2.3. 檢查域控服務器配置信息 3. 管理域賬號3.1. 新建域管理員賬號3.2. 新建普通域賬號 4. 服務器加域和退域4.1. 服務器加域操作4.2. 服務器退域操作 總…

Iperf基本用法

Iperf是一款開源的網絡性能測試工具&#xff0c;它可以用來測量網絡帶寬、延遲、抖動和數據包丟失等網絡性能指標。Iperf支持TCP和UDP協議&#xff0c;可以用于點對點或客戶端-服務器等模式的網絡測試。 安裝Iperf 在Linux系統中&#xff0c;您可以使用包管理器安裝Iperf。例如…

記錄一下簡單導入導出excel二級表頭

數據庫導入導出表頭 之前的工具類GenerateExcelToFile新增兩個導出這種二級表頭方法 package com.njry.utils;import cn.hutool.core.util.IdUtil; import com.njry.config.FileProperties; import com.njry.exception.BadRequestException; import org.apache.poi.hssf.user…

OpenGL的學習之路

Qt如何創建OpenGL的渲染窗口&#xff1f; 類比GLFW庫&#xff0c;Qt提供了OpenGL的渲染窗口類QOpenGLWidget&#xff1a; 1、重寫initializeGL()和resizeGL()函數來設置OpenGL狀態并提供透視圖轉換。 2、重寫paintGL()來繪制3D場景&#xff0c;只調用OpenGL函數。 3、還可以…

python 基礎綜合應用——小開發

#python 基礎綜合應用——小開發 綜合復習 變量- 循環- 函數- 模塊 開發 名片管理系統 名片管理系統介紹 名片管理系統可以理解成花名冊軟件&#xff0c;通過個人新建人的信息后可以進行查詢等簡單操作的程序 名片管理系統有三個作用&#xff0c; 1.新建名片 2.顯示全部名…

【設計模式】裝飾者模式里Java實現

插&#xff1a; AI時代&#xff0c;程序員或多或少要了解些人工智能&#xff0c;前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家(前言 – 人工智能教程 ) 堅持不懈&#xff0c;越努力越幸運&#xff0c;大家…

【VIM的使用】

Vim 是一個非常強大的文本編輯器&#xff0c;尤其在 Linux 環境下被廣泛使用。它基于 vi 編輯器開發而來&#xff0c;增加了許多功能和改進。下面是一個簡化的 Vim 教程&#xff0c;幫助你快速上手&#xff1a; 啟動 Vim 要啟動 Vim&#xff0c;只需在終端中輸入 vim [filen…

Leetcode刷題2---兩數相加 Python

目錄 題目及分析解法一: 迭代法解法二: 遞歸法解法三&#xff1a;反轉鏈表法 題目及分析 &#xff08;力扣序號2&#xff1a;兩數相加&#xff09; 給你兩個非空的鏈表&#xff0c;表示兩個非負的整數。它們每位數字都是按照逆序的方式存儲的&#xff0c;并且每個節點只能存儲…

python之音頻處理(2)兩個音頻文件的合并

from pydub import AudioSegment# 加載兩個音頻文件 audio1 AudioSegment.from_file(r"D:\websiteDownload\huanxing.wav") audio2 AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很煩.wav")# 設置間隔&#xff08;單位&#xff1a;…

Altium Designer專業PCB設計軟件下載安裝 Altium Designer安裝包下載獲取

在電子設計的廣袤領域中&#xff0c;PCB設計無疑占據著重要的地位。而Altium Designer作為一款業界領先的電子設計自動化軟件&#xff0c;其提供的先進布局工具&#xff0c;無疑為設計師們打開了一扇通往高效、精確設計的大門。 在PCB設計的核心環節——布局中&#xff0c;Alti…