美文网首页周记
周记 6.5 - 6.11

周记 6.5 - 6.11

作者: 小程有话说 | 来源:发表于2017-06-05 14:12 被阅读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中剥离出来,符合功能单一原则;注解形式也提升了开发速度。

    相关文章

      网友评论

        本文标题:周记 6.5 - 6.11

        本文链接:https://www.haomeiwen.com/subject/ayvifxtx.html