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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,117评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,798评论 19 139
  • CloudJavaBackendSummaries1、开发环境eclipse工程,引入jw仓库的jw-base,3...
    燕京博士阅读 5,020评论 0 0
  • 南马如约而至,爽约的是去年的好天气,一周细雨连绵不断,明天又将是一个阴雨天,有小伙伴信息我,还去不?去,当然去,...
    达令陈阅读 3,142评论 4 5
  • 每个人身上都有特定的磁场。 如果每个人磁场都被编码了,那心脏就是读取这些编码的器官。它总是能第一时间感应到那个最匹...
    消失的书店阅读 3,994评论 4 1