在我们日常工作中,会有这样的需求,假如前端新增、修改数据时,后端要针对手机号格式进行校验 ,但是框架有没有提供现成的关于手机号校验的注解,如果写在业务层里,无异于会增加代码的复杂度,综上考虑,使用自定义注解是比较方便且高效的
注解代码:
@Documented @Constraint(validatedBy = PhoneValidator.class) @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) @Retention(RetentionPolicy.RUNTIME) public @interface Phone { String message() default "手机号格式不正确"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
手机号校验业务处理:
public class PhoneValidator implements ConstraintValidator<Phone, CharSequence> { private Pattern pattern; @Override public void initialize(Phone constraintAnnotation) { // 这里可以获取注解的属性,如果有需要的话 // 比如正则表达式可以从注解中读取 pattern = Pattern.compile("^1[3-9]\\d{9}$"); } @Override public boolean isValid(CharSequence value, ConstraintValidatorContext context) { if (value == null) { return true; } return pattern.matcher(value).matches(); } }
实体类使用:
@Data public class EnterpriseAddParam { @ApiModelProperty(value = "联系人手机号码", example = "联系人手机号码") @NotBlank(message = "联系人手机号码不能为空") @Length(max = 20, message = "联系人手机号码过长,不能超过20个字符") @Phone private String contactPhoneNumber; }
控制层:
@PostMapping("add") @ApiOperation(value = "新增企业", notes = "新增企业") public void add(@RequestBody @Validated EnterpriseAddParam param) { charitableOrgBusinessWriteService.addEnterprise(param, getCurUserAccount()); }