springboot自定義注解校驗


有時候框架自帶的驗證規則不是很滿意  ,或者就是不喜歡 ,有錢任性

那么就自定義入參校驗

 

定義一個注解

package com.yirui.supervisor.util;

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

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Constraint(validatedBy = IsNullClass.class)
public @interface IsNull {

// flag無效時的提示內容
String message() default "";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}

 

定義一個規則類,規則持續改進中,目的  一個注解判斷這個參數所有情況的空值

package com.yirui.supervisor.util;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.reflect.Field;
import java.util.List;

public class IsNullClass implements ConstraintValidator<IsNull,Object> {


/**
* 初始化時操作
* @param flagValidator
*/
@Override
public void initialize(IsNull flagValidator) {

}

/**
* @param value 用戶輸入的值,如從前端傳入的某個值
*/
@Override
public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {
if(value==null){
return false;
}
if(value instanceof String){
return isNullString(value);
}
if(value instanceof List){
return isNullList(value);
}
return isNullObj(value);
}

private boolean isNullObj(Object value){
Field[] fields = value.getClass().getDeclaredFields();
for (Field e : fields) {
if (e.getAnnotation(IsNull.class) != null) {
try {
e.setAccessible(true);
Object o = e.get(value);
if(o==null){
return false;
}
if(o instanceof String){
return isNullString(o);
}
if(o instanceof List){
return isNullList(o);
}
}catch (Exception es){
System.out.println(es);
}

}
}
return true;
}

private boolean isNullString(Object value){
if(!value.toString().equalsIgnoreCase("null") && value.toString().trim().length() > 0){
return true;
}
return false;
}

private boolean isNullList(Object value){
List list = (List) value;
for(Object o:list){
if(o==null){
return false;
}
if(o instanceof String){
return isNullString(o);
}
if(o instanceof List){
return isNullList(o);
}
return isNullObj(o);
}
return true;
}
}

 

使用

@Data
@Accessors(chain = true)
public class TbJobDeleteVO extends UserVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主鍵id
     */
    @IsNull(message = "id不能為空")
@ApiModelProperty(value = "主鍵id") private List<String> id; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM