SpringValidation自定義注解及分組校驗(yàn)功能詳解
1. 引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>3.2.0</version> </dependency>
2. 自定義注解校驗(yàn)
使用場景:已有的注解不能滿足所有的校驗(yàn)需求,特殊的情況需要自定義校驗(yàn)(自定義校驗(yàn)注解)。 實(shí)現(xiàn)自定義注解可以通過模仿,SpringValidation提供的其他注解進(jìn)行改寫。
舉例說明:
我有一個(gè)實(shí)體類,其中一個(gè)參數(shù)state需要接收到前端數(shù)據(jù)后進(jìn)行校驗(yàn)(要求該參數(shù)只能是 已發(fā)布 或者 草稿)。而SpringValidation提供的注解無法滿足我的需求,此時(shí)便需要自定義注解。
2.1 創(chuàng)建Validation類
注意:該類需要實(shí)現(xiàn) ConstraintValidator接口,并實(shí)現(xiàn) isValid( )方法。方法內(nèi)即是校驗(yàn)規(guī)則, 我這里只是提供參考。請自行根據(jù)業(yè)務(wù)需求更改。
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
/**
* ConstraintValidator<State, String>前一個(gè)代表需要校驗(yàn)的注解,后一個(gè)代表校驗(yàn)類型
*/
public class Validation implements ConstraintValidator<State, String> {
/**
*
* @param value 將來要校驗(yàn)的數(shù)據(jù)
* @param constraintValidatorContext
* @return
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
//校驗(yàn)規(guī)則
if (value == null) {
return false;
}
if (value.equals("已發(fā)布") || value.equals("草稿")) {
return true;
}
return false;
}
}2.2 創(chuàng)建注解對象
注解名稱,請根據(jù)自己業(yè)務(wù)需求更改。
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Documented //元注解,代表可在文檔顯示
@Constraint(
validatedBy = {Validation.class} //指定提供校驗(yàn)規(guī)則的類,該類需要自己指定
)
//元注解,代表注解適用的對象(方法、字段、注解、類、屬性)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME) //元注解,代表注解的作用范圍
public @interface State {
//報(bào)錯提示
String message() default "state參數(shù)只能是已發(fā)布或者草稿";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}2.3 使用注解
找到對應(yīng)的實(shí)體類,在需要校驗(yàn)的參數(shù)上添加該注解即可。例如我這里需要對state進(jìn)行校驗(yàn)。

3. 分組校驗(yàn)
分組校驗(yàn)是指把校驗(yàn)項(xiàng)進(jìn)行歸類分組,在完成不同的功能的時(shí)候,校驗(yàn)指定組中的校驗(yàn)項(xiàng)。 分組校驗(yàn)常用于增加和修改操作時(shí)對數(shù)據(jù)的校驗(yàn)。
分組校驗(yàn)的 流程:
1.定義分組
2.定義校驗(yàn)項(xiàng)時(shí)指定歸屬的分組
3.校驗(yàn)時(shí)指定要校驗(yàn)的分組

3.1 實(shí)體類內(nèi)部定義接口

3.2 在參數(shù)上指定分組

3.3 給@Validated注解賦值

注意: 如果在方法上對參數(shù)進(jìn)行校驗(yàn),需要在類上添加@Validated注解。如果在實(shí)體類中對成員遍歷進(jìn)行校驗(yàn),需要在使用到這個(gè)類的接口方法中添加@Validated注解。
到此這篇關(guān)于SpringValidation自定義注解以及分組校驗(yàn)的文章就介紹到這了,更多相關(guān)SpringValidation自定義注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring動態(tài)監(jiān)聽Nacos配置中心key值變更的實(shí)現(xiàn)方法
Nacos本身提供支持監(jiān)聽配置變更的操作,但在使用起來,個(gè)人感覺不是很友好,無法精確到某個(gè)key的變更監(jiān)聽,所以本文小編給大家介紹了Spring動態(tài)監(jiān)聽Nacos配置中心key值變更的實(shí)現(xiàn)方法,需要的朋友可以參考下2024-08-08
SpringBoot引入swagger報(bào)錯處理的解決方法
這篇文章主要給大家介紹SpringBoot引入swagger是會出現(xiàn)報(bào)錯的處理解決方法,文中有詳細(xì)的解決過程,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)吧2023-06-06
Java數(shù)據(jù)結(jié)構(gòu)(線性表)詳解
本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)(線性表)的相關(guān)知識。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01
MybatisPlus實(shí)現(xiàn)分頁查詢和動態(tài)SQL查詢的示例代碼
本文主要介紹了MybatisPlus實(shí)現(xiàn)分頁查詢和動態(tài)SQL查詢的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

