代码风格-参数校验
相关依赖
<!--用于生成getter/setter方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--版本任意 -->
<version>1.16.8</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
<!-- validation使用el表达式所需包 -->
<dependency>
<groupId>de.odysseus.juel</groupId>
<artifactId>juel-api</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>de.odysseus.juel</groupId>
<artifactId>juel-impl</artifactId>
<version>2.2.7</version>
</dependency>
示例
枚举类型
@Getter
public enum SexEnum {
UNKNOW(0, "未知"),
MALE(1, "男性"),
FEMALE(2, "女性"),
;
private Integer value;
private String comment;
SexEnum(Integer value, String comment) {
this.value = value;
this.comment = comment;
}
public static SexEnum of(Integer value) {
if (value == null) {
return null;
}
switch (value) {
case 0:
return SexEnum.UNKNOW;
case 1:
return SexEnum.MALE;
case 2:
return SexEnum.FEMALE;
default:
return null;
}
}
}
枚举校验注解
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {EnumValidator.class})
@Documented
public @interface EnumValidAnnotation {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<?>[] target() default {};
}
需校验的实体类
@Data
public class ValidateVO {
@NotNull(message = "age不能为空")
@Range(min = 1, max = 12, message = "age必须在{min}~{max}之间")
public Integer age;
@EnumValidAnnotation(target = SexEnum.class, message = "性别只能使用{target}里的值")
public Integer sex;
}
校验工具类
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.xml.bind.ValidationException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValidationUtil {
private static Validator validator;
static {
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
validator = vf.getValidator();
}
/**
* javax.validation注解校验
*
* @param t 将要校验的对象
* @throws ValidationException
* @Description: 校验方法
*/
public static <T> List<String> validate(T t) {
Set<ConstraintViolation<T>> set = validator.validate(t);
List<String> validateError = new ArrayList<>();
if (set.size() > 0) {
for (ConstraintViolation<T> val : set) {
validateError.add(val.getMessage());
}
}
return validateError;
}
public static void main(String[] args) {
ValidateVO vo = new ValidateVO();
//vo.setSex(SexEnum.FEMALE.getValue());
vo.setAge(10);
List<String> resultList = ValidationUtil.validate(vo);
System.out.println(resultList.get(0));
}
}