周记

周记 6.5 - 6.11

2017-06-05  本文已影响11人  小程有话说

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中剥离出来,符合功能单一原则;注解形式也提升了开发速度。

上一篇下一篇

猜你喜欢

热点阅读