JSR303自定義校驗註解,自定義註解校驗字串是否是JSON字串,可擴充套件
目標:校驗字串是否是JSON字串
1 自定義校驗註解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
/**
* description: 自定義校驗註解,需指定校驗器,可以指定多個,校驗字串是否是json
*
* @author xiaosaguo
* @date 2020/09/21
*/
@Documented
@Constraint(validatedBy = {IsJsonConstraintValidator.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsJson {
String message() default "不是一個合法的JSON字串";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2 自定義註解校驗器
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.io.IOException;
/**
* description: 自定義註解校驗器,需指定註解和校驗型別,校驗是否是 JSON 格式
*
* @author xiaosaguo
* @date 2020/09/21 20:57
*/
public class IsJsonConstraintValidator implements ConstraintValidator<IsJson, String> {
public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@Override
public void initialize(IsJson constraintAnnotation) {
// 新版本可以不用實現這個方法
}
/**
* description: 校驗邏輯,是否校驗成功,空值配合 @Null 或 @NotNull、@NotEmpty 校驗
*
* @param value 被校驗的值
* @param context 上下文環境資訊
* @return boolean 校驗結果
* @author xiaosaguo
* @date 2020/06/10 20:47
*/
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return StringUtils.isEmpty(value) || isJsonValid(value);
}
public static boolean isJsonValid(String jsonInString) {
try {
OBJECT_MAPPER.readTree(jsonInString);
return true;
} catch (IOException e) {
return false;
}
}
}
用法:
-
implements ConstraintValidator<IsJson, String>
前面為自定義註解,後面為要校驗的欄位的型別
-
實現這個介面後,主要有兩個方法
- 初始化方法,public void initialize(IsJson constraintAnnotation) ,可以定義一些自定義屬性,實現複雜校驗。假設在 IsJson 註解中自定義一個成員,在此可以直接使用 constraintAnnotation.message() 獲取值。
- 校驗邏輯 public boolean isValid(String value, ConstraintValidatorContext context) ,這裡的 value 就是引數值。
3 使用方式
@Data
public class Demo {
@IsJson(groups = {SaveGroup.class, UpdateGroup.class})
@ApiModelProperty("JSON 字串")
private String json;
}
相關文章
- SpringBoot自定義校驗註解Spring Boot
- 自定義校驗註解ConstraintValidatorAI
- SpringBoot分組校驗及自定義校驗註解Spring Boot
- SpringBoot系列之使用自定義註解校驗使用者是否登入Spring Boot
- 分享!! 如何自定義許可權校驗的註解並用AOP攔截實現許可權校驗
- 使用AOP+自定義註解完成spring boot的介面許可權校驗Spring Boot
- 基於shiro的自定義註解的擴充套件套件
- 自定義註解|切面|反射|策略模式進行入參比較校驗反射模式
- java校驗是否是日期字串Java字串
- 自定義註解
- SpringSecurity:hasAuthority與自定義許可權校驗SpringGse
- 小程式自定義表單校驗
- 自定義ConditionalOnXX註解
- 自定義JAVA註解Java
- 引數校驗註解
- Android自定義字型--自定義TextView(可擴充套件不同ttf字Android自定義字型TextView套件
- Java中的註解-自定義註解Java
- JAVA-註解(2)-自定義註解及反射註解Java反射
- 省掉bean自定義spring mvc註解注入json值BeanSpringMVCJSON
- Flutter利用註解生成可自定義的路由Flutter路由
- UEditor 自定義圖片視訊尺寸校驗
- 使用jakarta.validation自定義校驗規則
- Java 自定義註解在登入驗證的應用Java
- 實現註解校驗Dto欄位是否為空
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- java中如何自定義註解Java
- Spring Boot 自定義註解失效Spring Boot
- springBoot自定義註解的使用Spring Boot
- element-ui自定義表單校驗規則及常用表單校驗UI
- Spring Cloud Gateway自定義Token校驗過濾器SpringCloudGateway過濾器
- JS 校驗非法字串JS字串
- 自定義註解以及註解在反射中的應用反射
- spring boot+自定義 AOP 實現全域性校驗Spring Boot
- Java註解-後設資料、註解分類、內建註解和自定義註解Java
- HIVE自定義函式的擴充套件Hive函式套件
- Java 自定義註解及使用場景Java
- SpringBoot自定義註解、AOP列印日誌Spring Boot
- app直播原始碼,java自定義註解APP原始碼Java