springboot自定義注解校驗(yàn)規(guī)則

一、自定義嵌套參數(shù)的校驗(yàn)注解規(guī)則

1. 接受前臺(tái)參數(shù)

    //AlyUrgentOutStoreApplyAddDto 為嵌套參數(shù)類
    public Result add(@Valid @RequestBody AlyUrgentOutStoreApplyAddDto alyUrgentOutStoreApplyAddDto, HttpServletRequest request) {
        alyUrgentOutService.insertUrgentOutStoreApply(alyUrgentOutStoreApplyAddDto, request);
        return ResultGenerator.genSuccessResult();
    }

2. 接收參數(shù)的實(shí)體類

import cn.com.magnequench.alloy.web.paramscheck.UrgentOutStoreAnno;

import java.util.Date;
import java.util.List;

/**
 * @Desc TODO   @UrgentOutStoreAnno注解為自定義注解
 **/
@UrgentOutStoreAnno
public class AlyUrgentOutStoreApplyAddDto {

    private String applyMemo;
    private Date claimTime;
    private List<AlyUrgentOutStoreUseDataDto> selected;

    public String getApplyMemo() {
        return applyMemo;
    }

    public void setApplyMemo(String applyMemo) {
        this.applyMemo = applyMemo;
    }

    public Date getClaimTime() {
        return claimTime;
    }

    public void setClaimTime(Date claimTime) {
        this.claimTime = claimTime;
    }

    public List<AlyUrgentOutStoreUseDataDto> getSelected() {
        return selected;
    }

    public void setSelected(List<AlyUrgentOutStoreUseDataDto> selected) {
        this.selected = selected;
    }
}

3. 自定義注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { UrgentOutStoreValidator.class})
/**
  * @Desc //TODO  自定義校驗(yàn)注解,UrgentOutStoreValidator為自定義校驗(yàn)規(guī)則的類
  **/
public @interface UrgentOutStoreAnno {
    String message() default "msg";// 校驗(yàn)的失敗的時(shí)候返回的信息,可以指定默認(rèn)值

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default {};
}

4. 自定義校驗(yàn)注解的規(guī)則

import cn.com.magnequench.alloy.dto.AlyUrgentOutStoreApplyAddDto;
import cn.com.magnequench.alloy.dto.AlyUrgentOutStoreUseDataDto;
import common.core.utils.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.List;

/**
 * @Desc TODO
 **/
public class UrgentOutStoreValidator implements ConstraintValidator<UrgentOutStoreAnno,AlyUrgentOutStoreApplyAddDto> {

    @Override
    public void initialize(UrgentOutStoreAnno constraintAnnotation) {
    }

    @Override
    public boolean isValid(AlyUrgentOutStoreApplyAddDto alyUrgentOutStoreApplyAddDto, ConstraintValidatorContext context) {
        // 處理校驗(yàn)邏輯 

        return false;
    }
}

二、元注解

元注解的作用就是負(fù)責(zé)注解其他注解

1. @Documented

Documented 可以作用于類上及類方法上,表明這個(gè)注釋是由 javadoc記錄的,在默認(rèn)情況下也有類似的記錄工具。 如果一個(gè)類型聲明被注釋了文檔化,它的注釋成為公共API的一部分

2. @Target

是用來(lái)修飾注解的元注解,它有一個(gè)屬性ElementType是枚舉類型

  • ElementType.TYPE:類、接口(包括注釋類型)或枚舉聲明
  • ElementType.FIELD:字段聲明(包括枚舉常量)
  • ElementType.METHOD:方法聲明
  • ElementType.PARAMETER:形式參數(shù)聲明
  • ElementType.CONSTRUCTOR:構(gòu)造函數(shù)聲明
  • ElementType.LOCAL_VARIABLE:局部變量聲明
  • ElementType.ANNOTATION_TYPE:批注類型聲明
  • ElementType.PACKAGE:包聲明
  • ElementType.TYPE_PARAMETER:類型參數(shù)聲明
  • ElementType.TYPE_USE:類型的使用
  • ElementType.MODULE:模塊聲明

3. @Retention

是用來(lái)修飾注解的元注解,它有一個(gè)屬性RetentionPolicy是枚舉類型

  • RetentionPolicy.SOURCE:注釋將被編譯器丟棄
  • RetentionPolicy.CLASS:注釋將由編譯器記錄在類文件中,但不需要在運(yùn)行時(shí)由VM保留。這是默認(rèn)行為
  • RetentionPolicy.RUNTIME:注釋將由編譯器記錄在類文件中,并在運(yùn)行時(shí)由VM保留,因此可以反射地讀取注釋

4. @Constraint(validatedBy = { })

validatedBy屬性指定了需要進(jìn)行校驗(yàn)的策略類集合,這是一個(gè)數(shù)組
{} 數(shù)組中的類要 implements ConstraintValidator<UrgentOutStoreAnno,AlyUrgentOutStoreApplyAddDto>接口,ConstraintValidator第一個(gè)類型是自定義校驗(yàn)注解,第二個(gè)是使用自定義注解接受參數(shù)的實(shí)體類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容