WEB开发网      濠电姷鏁告繛鈧繛浣冲洤纾瑰┑鐘宠壘閻ょ偓銇勯幇鍫曟闁稿鍠愰妵鍕冀閵娧佲偓鎺楁⒒閸曨偄顏柡宀嬬畱铻e〒姘煎灡绗戦梻浣筋嚙濮橈箓顢氳濠€浣糕攽閻樿宸ュΔ鐘叉啞缁傚秹宕滆绾惧ジ寮堕崼娑樺缂佹宀搁弻鐔风暋閻楀牆娈楅梺璇″枓閺呯姴鐣疯ぐ鎺濇晝闁靛牆妫欓蹇旂節閻㈤潧浠﹂柛銊ョ埣楠炴劙骞橀鑲╋紱闂佽宕樼粔顔裤亹閹烘挸浜归梺缁樺灦閿曗晛螞閸曨垱鈷戦柟鑲╁仜婵″ジ鎮楀☉鎺撴珖缂侇喖顑呴鍏煎緞濡粯娅囬梻浣瑰缁诲倿寮绘繝鍥ㄦ櫇闁稿本绋撻崢鐢告煟鎼淬垻鈯曢柨姘舵煟韫囥儳绋荤紒缁樼箖缁绘繈宕橀妸褌绱濋梻浣筋嚃閸ㄤ即宕弶鎴犳殾闁绘梻鈷堥弫鍌炴煕閳锯偓閺呮瑧妲愬Ο琛℃斀闁绘劕妯婇崵鐔封攽椤旇棄鍔ら摶鐐烘煕閺囥劌澧柛娆忕箻閺屽秹宕崟顒€娅g紓浣插亾濠㈣泛顑囩粻楣冩煙鐎涙ḿ绠橀柨娑樼У椤ㄣ儵鎮欓鍕紙闂佽鍠栫紞濠傜暦閹偊妲诲┑鈩冨絻椤兘寮诲☉銏犖╅柕澶堝労閸斿绱撴担绋库偓鍝ョ矓瑜版帒鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘 ---闂傚倸鍊烽悞锔锯偓绗涘厾娲煛閸涱厾顔嗛梺璺ㄥ櫐閹凤拷
开发学院软件开发Java 利用Hibernate Validator实现对Bean的参数验证 阅读

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

 2012-05-16 17:14:09 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄妞ゆ劗鍘ч埥澶娢熼柨瀣偓濠氭⒑瑜版帒浜伴柛鎾寸☉閳绘柨顫濋懜纰樻嫼闂佸憡绋戦オ鏉戔枔閺冣偓缁绘稓浠﹂崒姘瀳闂佸磭绮幑鍥嵁鐎n亖鏀介柟閭﹀墯椤斿倹淇婇悙顏勨偓鏍ь潖婵犳艾鍌ㄧ憸蹇涘箟閹绢喗鏅搁柨鐕傛嫹
核心提示:Bean Validation类库比较最近写工程的时候想把对Bean的属性验证加上,就和Grails里面对Domain里面每个值有个验证那样,利用Hibernate Validator实现对Bean的参数验证,但自己动手想写的漂亮工作量也不小,想来这么基础的工作肯定有人做过了,我把Validator又简单封装了一下,贴

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代码:

public class User { 
     
    @Email(message="邮箱格式验证失败") 
    @Size(max=32, message="邮箱长度不能超过32个字符") 
    private String email;       // 用户的邮箱 
 
    @NotBlank(message="昵称不能为空") 
    @Size(min=4, max=16, message="昵称长度必须在4到16个字符之间") 
    private String nickname;    // 昵称 
     
    @NotBlank(message="密码不能为空") 
    @Size(min=6, max=16, message="密码长度必须在6个字符至16个字符") 
    private String password;    // 登录密码 
     
    public User validate() { 
        ValidateUtil.validate(this); 
        return this; 
    } 
 
    // 后面省略 
    // ...... 
 
} 

封装的Validator:

public class ValidateUtil { 
     
    private static Validator validator; // 它是线程安全的 
 
    static { 
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
        validator = factory.getValidator(); 
    } 
     
    public static <T> void validate(T t) { 
        Set<ConstraintViolation<T>> constraintViolations = validator.validate(t); 
        if(constraintViolations.size() > 0) { 
            String validateError = ""; 
            for(ConstraintViolation<T> constraintViolation: constraintViolations) { 
                validateError += constraintViolation.getMessage() + ";"; 
            } 
            throw new ValidateException(validateError); 
        } 
    } 
     
} 

Tags:利用 Hibernate Validator

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接