标签:解决 nts step over size 1.3 tle 没有 tor
想必大家在SpringMVC项目做请求参数验证的时候,都会遇到一个问题,就是如何验证枚举?方法无外乎以下几种:/**
* 请求参数model
* Created by TonyZeng on 2017/3/25.
*/
public class AddQuestionRqVo {
/**
* 性别
*/
@CheckSex
private Integer sex;
}
/**
* 性别
* Created by TonyZeng on 2017/3/29.
*/
public enum SexType {
Free(0, "不限"),
Male(1, "男"),
Female(2, "女");
private int id;
private String chinese;
// 构造方法
SexType(int id, String chinese) {
this.id = id;
this.chinese = chinese;
}
public static SexType valueOf(int value) {
switch (value) {
case 0:
return SexType.Free;
case 1:
return SexType.Male;
case 2:
return SexType.Female;
default:
return null;
}
}
public static SexType textOf(String text) {
switch (text) {
case "不限":
return SexType.Free;
case "男":
return SexType.Male;
case "女":
return SexType.Female;
default:
return null;
}
}
//此处省略get&set方法
}
/**
* 用枚举指定参数
* Created by TonyZeng on 2017/4/24.
*/
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CheckSexValidator.class)
@Documented
public @interface CheckSex {
/**
* 用来定义默认得消息模版, 当这个约束条件被验证失败的时候,通过此属性来输出错误信息.
* @return
*/
String message() default "请提供正确的性别(ID)";
/**
* 用于指定这个约束条件属于哪(些)个校验组
* @return
*/
Class<?>[] groups() default {};
/**
* Bean Validation API 的使用者可以通过此属性来给约束条件指定严重级别. 这个属性并不被API自身所使用.
* @return
*/
Class<? extends Payload>[] payload() default {};
}
/**
* 自定义性别Validator
* Created by TonyZeng on 2017/4/25.
*/
public class CheckSexValidator implements ConstraintValidator<CheckSex, Integer> {
@Override
public void initialize(CheckSex constraintAnnotation) {
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
return SexType.valueOf(value) != null;
}
}
/**
* Created by TonyZeng on 2016/9/6.
*/
public class ValidateUtil<T> {
private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
private static Validator validator = validatorFactory.getValidator();
/**
* 验证请求参数
*
* @param model
* @return null 则说明验证成功,如果非null 则说明验证失败
*/
public String validate(T model) {
model.getClass().getAnnotatedInterfaces();
Set<ConstraintViolation<T>> violations = validator.validate(model);
if (violations.size() > 0) {
String msg = "";
for (ConstraintViolation<T> violation : violations) {
msg += violation.getMessage() + "<br>";
}
return msg;
}
return null;
}
}
@Override
public BaseDto addQuestion(AddQuestionRqVo requestVo) {
String validateResult = new ValidateUtil<AddQuestionRqVo>().validate(requestVo);
if (validateResult != null) {
return new BaseDto(-1, validateResult);
}
}
想必大家在做参数验证的时候,都会遇到一个问题,就是如何验证枚举? 自定义annotation 自定义Validator
标签:解决 nts step over size 1.3 tle 没有 tor
原文地址:http://www.cnblogs.com/tonyzeng/p/6761023.html