背景
官方提供的注解多数可以解决现实业务场景中基本业务校验,但有些特殊场景因业务的复杂性,也还是需要在入口处对入参进行各种角度的校验,以求简化业务层的处理,降低业务处理复杂性与方法入口的强约束性。 以上背景,下面就举个简单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