首先定义一个校验注解
/**
* 身份证校验
*/
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IdentityConstraintValidator.class)//用哪个校验器校验
public @interface IdentityNo {
String message() default "身份证号码不符合规则";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
校验逻辑,我们只需要去实现 ConstraintValidator 这个接口重写 isValid 方法即可
/**
* 身份证约束逻辑判断
*/
public class IdentityConstraintValidator implements ConstraintValidator<IdentityNo, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return check(value);//返回身份证号码是否符合规则(自己实现校验逻辑)
}
}
这样一来,我们自己的注解就定义好了,把它用在需要验证的字段上就可以了。
@Data
public class OrderRequest {
//自己定义的注解
@IdentityNo
private String merchantCode;
private String memberCode;
}
测试结果:
{
"path": "/order/submit",
"error": "Bad Request",
"message": "merchantCode:身份证号码不符合规则",
"status": 400
}
hibernate-validator 配合统一异常处理简直是完美呀,这样绝大多数问题在前端传参的时候就能暴露出来了~~