Hibernate Validator接口参数效验
在我们写接口时需要做参数效验,如果每次我们都手动实现无疑效率低下,同时还会在业务代码中掺杂太多的非相关代码;hibernate-validator很好的解决了这个问题。
POM引用
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
Vo中使用
@NotNull
@Size(min = 2, max = 30, message = "提示内容") // 字符串长度介于2到30之间
private String name;
@NotNull
@Min(18) // 不能小于18
private Integer age;
Controller效验
@PostMapping("/")
public String checkPersonInfo(@Valid PersonForm personForm, // @Valid 效验对象
BindingResult result) {
if (result.hasErrors()) { // 效验失败处理
return "error";
}
return "success";
}
常用注解
注解 | 含义 |
---|---|
@Null | 必须为空 |
@NotNull | 不为空 |
@AssertFalse | 为False |
@AssertTrue | 为True |
@DecimalMax(value) | 不大于value的数值 |
@DecimalMin(value) | 不小于value的数值 |
@Digits(integer,fraction) | 整数部分不超过integer,小数部分不超过fraction |
@Future | 将来的日期 |
@Past | 过去的日期 |
@Max(value) | 不大于value的数值 |
@Min(value) | 不小于value的数值 |
@Pattern(value) | 满足指定正则表达式 |
@Size(max,min) | 长度在min到max之间 |
高级篇-正则表达式
@Pattern(regexp = "(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w{2,3}){1,3})", message = "邮箱格式不正确") // 匹配false 返回message
private String email; // 效验邮箱格式
自定义注解
public class EMailValidator implements ConstraintValidator<EMail, String> {
private static String emailReg = "(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w{2,3}){1,3})";
private static Pattern emailPattern = Pattern.compile(emailReg);
@Override
public void initialize(EMail constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return emailPattern.matcher(value.toString()).matches();
}
}
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EMailValidator.class)
public @interface EMail {
String message() default "邮箱格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Hibernate-Validator 把参数效验从Controller中剥离出来,符合功能单一原则;注解形式也提升了开发速度。
网友评论