自定义注解 实现校验
引入pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
自定义注解
@Documented
@Constraint(validatedBy = PhoneValidator.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({METHOD, TYPE, ANNOTATION_TYPE, CONSTRUCTOR, FIELD, PARAMETER})
public @interface Phone {
String message() default "电话号格式错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
注解的实现
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
@Component
public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public boolean isValid(String content, ConstraintValidatorContext constraintValidatorContext) {
return StringUtils.hasLength(content) && NumberUtil.isNumber(content) && content.length() == 11;
}
}
controller
@Validated
@RestController
public class ValidationController {
@GetMapping("/savePhone")
public R<String> savePhone(@RequestParam("phone") @Phone(message = "请检查电话号!") String phone) {
return R.success();
}
}
测试 和 注意点
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.4.Final</version>
</dependency>
javax.validation.ConstraintViolationException: savePhone.phone: 请检查电话号!
at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:116) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]