Java Validation Api如何實(shí)現(xiàn)自定義注解
背景
官方提供的注解多數(shù)可以解決現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景中基本業(yè)務(wù)校驗(yàn),但有些特殊場(chǎng)景因業(yè)務(wù)的復(fù)雜性,也還是需要在入口處對(duì)入?yún)⑦M(jìn)行各種角度的校驗(yàn),以求簡(jiǎn)化業(yè)務(wù)層的處理,降低業(yè)務(wù)處理復(fù)雜性與方法入口的強(qiáng)約束性。 以上背景,下面就舉個(gè)簡(jiǎn)單Demo進(jìn)行自定義注解校驗(yàn)的實(shí)現(xiàn)。
注解定義類
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author wpp
* @date 2020/8/22 14:30
*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneCustomizeValidator.class)
public @interface CustomizeValidator {
String message() default "不是國(guó)內(nèi)手機(jī)號(hào)";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
注解方法處理類
import cn.hutool.core.util.StrUtil;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Pattern;
/**
* @author wpp
* @date 2020/8/22 14:33
*/
public class PhoneCustomizeValidator implements ConstraintValidator<CustomizeValidator, String> {
private String phoneRegex = "^(16[0-9]|19[0-9]|13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[0-9])[0-9]{8}$";
private Pattern phonePattern = Pattern.compile(phoneRegex);
@Override
public void initialize(CustomizeValidator constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (StrUtil.isBlank(value)) {
return Boolean.FALSE;
}
return phonePattern.matcher(value).matches();
}
}
使用方式
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
/**
* @author wpp
* @date 2020/8/22 14:49
*/
@Data
@Builder
public class CustomizeDTO {
@ApiModelProperty(name = "phone", value = "手機(jī)號(hào)碼")
@Length(max = 13)
private String phone;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Springboot項(xiàng)目javax.validation使用方法詳解
- java validation 后臺(tái)參數(shù)驗(yàn)證的使用詳解
- java使用Validation進(jìn)行數(shù)據(jù)校驗(yàn)的方式總結(jié)
- JAVA中通過Hibernate-Validation進(jìn)行參數(shù)驗(yàn)證
- JAVA中的字段校驗(yàn)(validation)
- 使用javax.validation.constraints對(duì)請(qǐng)求體進(jìn)行統(tǒng)一校驗(yàn)
- Java參數(shù)校驗(yàn)中validation和validator的區(qū)別詳解
- Java Validation Api實(shí)現(xiàn)原理解析
- Javax Validation自定義注解進(jìn)行身份證號(hào)校驗(yàn)
- Java使用validation攔截非法提交的數(shù)據(jù)的方法實(shí)現(xiàn)
相關(guān)文章
Springboot整合redis實(shí)現(xiàn)發(fā)布訂閱功能介紹步驟
發(fā)布訂閱作為一種設(shè)計(jì)思想在很多開源組件中都有體現(xiàn),比如大家熟知的消息中間件等,可謂把發(fā)布訂閱這一思想體現(xiàn)的淋漓盡致了2022-09-09
java連接mysql數(shù)據(jù)庫詳細(xì)步驟解析
以下是對(duì)java連接mysql數(shù)據(jù)庫的具體詳細(xì)步驟進(jìn)行了分析介紹,需要的朋友可以過來參考下2013-08-08
Java?EasyExcel導(dǎo)入帶圖片的完整過程記錄
這篇文章主要介紹了關(guān)于結(jié)合EasyExcel和ApachePOI來實(shí)現(xiàn)Excel數(shù)據(jù)批量導(dǎo)入并讀取圖片的過程,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12
springboot基于docsify?實(shí)現(xiàn)隨身文檔
這篇文章主要介紹了springboot基于docsify實(shí)現(xiàn)隨身文檔的相關(guān)資料,需要的朋友可以參考下2022-09-09
Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))
所謂的類加載機(jī)制就是虛擬機(jī)將class文件加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,轉(zhuǎn)換解析和初始化,形成虛擬機(jī)可以直接使用的java類型,本文給大家介紹類加載機(jī)制過程從類文件到虛擬機(jī)的詳細(xì)說明,感興趣的朋友跟隨小編一起看看吧2021-06-06
Java參數(shù)傳遞及值傳遞實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java參數(shù)傳遞及值傳遞實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08

