在最近的开发中,我碰到了一个让人头疼的问题:参数校验太多了!每个接口、每个字段都需要校验,代码写起来特别烦,而且还容易出错。为了不被这些琐碎的校验逻辑淹没,这里使用 Spring 提供的参数校验工具来解决这个问题
自定义校验
首先需要创建一个注解,其中 AlarmValidatorImpl.class 表示具体的校验实现类
@Constraint(validatedBy = { AlarmValidatorImpl.class })
@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface AlarmRulesValidator {
String message() default "错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
然后再创建实现类,其中需要实现的泛型1是 监听那个注解,泛型2 表示传递过来的类型。
public class AlarmValidatorImpl implements ConstraintValidator<AlarmRulesValidator, AlarmRules> {
private ConstraintValidatorContext context;
@Override
public boolean isValid(AlarmRules value, ConstraintValidatorContext context) {
this.context = context;
// true 表示校验成功,false 失败
return true;
}
/**
* 上报错误错误
*/
private void error(String msg) {
// 禁止默认报错
context.disableDefaultConstraintViolation();
// 添加自定义错误信息
context.buildConstraintViolationWithTemplate(msg).addConstraintViolation();
}
}