首页 文章 精选 留言 我的

精选列表

搜索[参数模型],共10000篇文章
优秀的个人博客,低调大师

利用Hibernate Validator实现对Bean的参数验证

Bean Validation类库比较 最近写工程的时候想把对Bean的属性验证加上,就和Grails里面对Domain里面每个值有个验证那样。但自己动手想写的漂亮工作量也不小,想来这么基础的工作肯定有人做过了。上网查了一下就找到jsr303的标准,果然有很成熟的实现类库。看了一圈感觉比较好的有三个,分别是Hibernate Validator、apache bval、spring validator。 1.spring validator:其实我本来很看好,应该与spring有很好的集成,但是上官网看了一下有点失望,直接使用很麻烦,要一个个写定义文件,比较特色的是与spring mvc集成,可以在Controller层实现验证。 2.apache bval:也是自己用apache的东西用习惯了,比较倾向于用这个,上官网一看,近期还被提成Top Project了,兴奋的打开文档页就惊呆了,居然大片空白。想必用的人还很少,上手也太有挑战了。 3.Hibernate Validator:这个大家推荐的比较多,是JBoss的开源项目(近两年发现JBoss出了不少好项目),看了一下文档,非常详细,使用的方法也是我最喜欢的注解。仔细看了一下,就是验证和原先想的出入较大,它必须显示的生产一个Validator对象再去验证Bean对象,仔细想想这样确实也灵活些。 Hibernate Validator的使用 根据官网的例子走了一下,很快就跑通了。但是发现一个细节问题,开始怎么运行都报Log4j找不到TRACK,后来发现原来log4j必须用log4j-1.2.16.jar或以上版本。 我用的也很简单,都是一些基本的数据边界验证即可,加上声明的bean非常漂亮。为了简化代码,我把Validator又简单封装了一下。贴一下代码吧,供大家参考。 摘选的Bean代码: publicclassUser{ @Email(message="邮箱格式验证失败") @Size(max=32,message="邮箱长度不能超过32个字符") privateStringemail;//用户的邮箱 @NotBlank(message="昵称不能为空") @Size(min=4,max=16,message="昵称长度必须在4到16个字符之间") privateStringnickname;//昵称 @NotBlank(message="密码不能为空") @Size(min=6,max=16,message="密码长度必须在6个字符至16个字符") privateStringpassword;//登录密码 publicUservalidate(){ ValidateUtil.validate(this); returnthis; } //后面省略 //...... } 封装的Validator: publicclassValidateUtil{ privatestaticValidatorvalidator;//它是线程安全的 static{ ValidatorFactoryfactory=Validation.buildDefaultValidatorFactory(); validator=factory.getValidator(); } publicstatic<T>voidvalidate(Tt){ Set<ConstraintViolation<T>>constraintViolations=validator.validate(t); if(constraintViolations.size()>0){ StringvalidateError=""; for(ConstraintViolation<T>constraintViolation:constraintViolations){ validateError+=constraintViolation.getMessage()+";"; } thrownewValidateException(validateError); } } } Android环境的使用 我本打算是在java和android环境都用起来的,但是折腾了大半天,发现java.beans.Introspector是Hibernate Validator用到的一个核心类,但是这个类缺没有包含在android环境中。对比了一下才发现,android里面有很多j2se的类被裁减了,这也解释了为什么有些jar在android环境下就不能运行。 无奈之下的解决办法: 1. 改用了Validator 4.2.0的版本,这个版本至少Log类没用到这个,是slf4j的。在调用的地方统一加了系统验证,如果是Dalvik环境就不进行验证。代码如:if(System.getProperty("java.vm.name").equals("Dalvik")) 2. 在网上搜索了很久,有人提到用jarjar重新打包有可能可以解决,找了点资料看了一下,稍微有点麻烦,有空试一下,如果搞定了再贴出来。 本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/864836,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册