背景
官方提供的注解多數可以解決現實業務場景中基本業務校驗,但有些特殊場景因業務的復雜性,也還是需要在入口處對入參進行各種角度的校驗,以求簡化業務層的處理,降低業務處理復雜性與方法入口的強約束性。 以上背景,下面就舉個簡單Demo進行自定義注解校驗的實現。
注解定義類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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 "不是國內手機號" ; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } |
注解方法處理類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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(); } } |
使用方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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 = "手機號碼" ) @Length (max = 13 ) private String phone; } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/guoguochong/p/13545658.html