Java bean验证顺序

Java下对输入的校验主要是基于jsr303(jsr 380)通过对bean的field加校验注解,就可以让框架自动对bean校验。并且Java自带的校验注解和hibernate的校验注解,基本上把基本的校验覆盖了,非常方便。

使用中,我碰到这样一个问题

class User {
    @NotEmpty
    @UserExist
    String username;

    @NotEmpty
    String address;
}

对输入的User对象,需要校验username不为空,并且username在系统中存在,这里的@UserExist是自定义的校验注解,通过查询数据库校验用户是否存在。

问题是如果username为空,Java会执行@NotEmpty@UserExist两个校验,但是实际开发中,是不允许空用户名存在的,所以执行了NotEmpty后,就应该停止校验,这样可以减少一次用户数据表的访问,类似连续&&的短路机制。

对于这个问题,jsr303已经有现成的方法,通过定义注解执行顺序,可以解决这个问题:

@GroupSequence({User.class, Second.class, Third.class})
class User {
    @NotEmpty
    @UserExist(groups = Second.class)
    String username;

    @NotEmpty
    String address;
}

Second和Third是一个marker interface,本身没有任何意义,在这里仅作为排序符号。

改成这样后,如果username为空,就会直接退出校验,从而避免无意义执行UserExist校验。

参考:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,974评论 6 342
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 1,733评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 子曰:不患人之不己知,患不知人也。 患:忧也,担心,忧虑,灾害等意思。 知:了解,晓得,明了。 这个章句,孔子说:...
    浅浅君子阅读 1,222评论 0 0
  • 每天快乐或哀愁 我都讲给你听 你会像初夏 把我的话语化成轻柔的晨风 荡漾的树枝 淡定的白云 从容的天空 还有那一汪...
    abbychen阅读 191评论 0 3