1.当我们进行参数校验的时候,通过标签添加到参数上,这边方便复用和代码简洁
主要的maven 依赖有
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.9.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.3.3</version>
</dependency>
2标签
代码实现
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;
@Target({ ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint( validatedBy = {LongConstraint.class})
public @interface NotLong {
String message() default "not long";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
ConstraintValidator 实现
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class LongConstraint implements ConstraintValidator<NotLong,Object> {
@Override
public boolean isValid(Object s, ConstraintValidatorContext constraintValidatorContext) {
if(s != null && s instanceof Long){
return true;
}
return false;
}
}
注: 这种注解校验参数有个问题就是,只有接受了参数后才会走校验,比如传long类型的参数,传的“sds”,这个会在走标签之前就会抛异常,这块用aop进行拦截校验参数类型感觉代价有点大,不知道大家有什么好的想法吗?参数改成string,那么别的调用方也要改动,很鸡肋啊