主要是根据业务场景需求对参数进行校验,不单单是Rest层的校验,也可以作为普通方法参数校验。
引入依赖
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
工具类:
public class ValidateUtil {
public static Validator validator;
private static ValidatorFactory factory;
static {
Locale.setDefault(new Locale("zh", "CN"));
factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
public static <T> String paramCheckReturnStrMsg(T bean, Class<?>... groups) {
if (bean == null) {
return null;
}
Set<ConstraintViolation<T>> validateSet = validator.validate(bean, groups);
StringBuilder stringBuilder = new StringBuilder();
for (ConstraintViolation<T> constraintViolation : validateSet) {
stringBuilder.append(constraintViolation.getMessage()).append(",");
}
if (stringBuilder.length() == 0) {
return null;
}
return stringBuilder.toString().substring(0, stringBuilder.length() - 1);
}
}
测试VO
public class User {
// 标记接口
public interface NameNotBlank{};
private int age;
@NotBlank(message = "姓名不能为空",groups = NameNotBlank.class )
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(int age, String name) {
this.age = age;
this.name = name;
}
}
测试方法:
@RestController
public class TestRe {
@RequestMapping("/test")
public String get(@RequestBody User user){
String str = ValidateUtil.paramCheckReturnStrMsg(user,User.NameNotBlank.class);
if(null != str ){
System.out.println("参数异常情况:"+str);
}else{
System.out.println("参数正常");
}
return str;
}
}
@NotNull 和 @NotEmpty 和@NotBlank 区别
@NotEmpty 用在集合类上面
@NotBlank 用在String上面
@NotNull 用在基本类型上