1、编写一个自定义的校验注解,可以参考官方提供的javax.validation.constraints包下的注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Documented
// 指定使用哪个自定义的校验器进行校验
@Constraint(validatedBy = {ListValueConstraintValidator.class})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
public @interface ListValue {
/**
* JSR303规定必须包含message、groups和payload
*/
// 国际化消息会自动去classpath下名为ValidationMessages.properties的文件中查找对应的key
String message() default "{org.hxr.common.validator.constraints.ListValue.message}";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
/**
* 指定可用的范围值
*/服务器托管网
int[] vals() default {};
}
2、编写一个自定义的校验器
import org.hxr.common.validator.constraints.ListValue;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;
public class ListValueConstraintValidator implements ConstraintValidator {
private Set set = new HashSet();
/**
* 初始化
* @param constraintAnnotation annotation instance for a given constraint declaration
*/
@Override
public void initialize(ListValue constraintAnnotation) {
int[服务器托管网] vals = constraintAnnotation.vals();
if (vals != null) {
for (int val : vals) {
set.add(val);
}
}
}
/**
*
* @param value 需要校验的controller值
* @param context context in which the constraint is evaluated
*
* @return
*/
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return set.contains(value);
}
}
3、在自定义注解中关联自定义校验器,见1@Constraint
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度
前言 我们在刚开始学习ClickHouse的MergeTree引擎时,就会发现建表语句的末尾总会有SETTINGS index_granularity = 8192这句话(其实不写也可以),表示索引粒度为8192。在每个data part中,索引粒度参数的含义…