摘要:故在介紹一款非常好用的后端驗(yàn)證數(shù)據(jù)有效性的框架已經(jīng)內(nèi)置支持字段非空,數(shù)據(jù)長(zhǎng)度,數(shù)據(jù)范圍,正則匹配等驗(yàn)證,同時(shí)還可以在此框架的基礎(chǔ)上實(shí)現(xiàn)自定義的驗(yàn)證。
介紹
如今開(kāi)發(fā)項(xiàng)目中數(shù)據(jù)的安全驗(yàn)證已經(jīng)是必不可少的一部分,如果只是讓前段做驗(yàn)證,并不能保證整個(gè)系統(tǒng)的安全。故在介紹一款非常好用的后端驗(yàn)證數(shù)據(jù)有效性的框架:oval
oval已經(jīng)內(nèi)置支持字段非空,數(shù)據(jù)長(zhǎng)度,數(shù)據(jù)范圍,正則匹配等驗(yàn)證,同時(shí)還可以在此框架的基礎(chǔ)上實(shí)現(xiàn)自定義的驗(yàn)證。這次我就介紹一下常用的數(shù)據(jù)是否在數(shù)據(jù)庫(kù)重復(fù)的驗(yàn)證。
依賴:
net.sf.oval oval 1.90
簡(jiǎn)單使用
在此我定義一個(gè)User的實(shí)體類,其簡(jiǎn)單的驗(yàn)證代碼如下:
public class User { @NotNull(message = "username can not be null",profiles = "username") @Length(min = 8,max = 20,message = "username length error.",profiles = "username") @MatchPattern(pattern = "(w+)",message = "username have special characters.",profiles = "username") private String username; private String password; }
profiles 表示給該字段定義一個(gè)標(biāo)簽,為對(duì)象字段的選擇性驗(yàn)證而存在。
自定義驗(yàn)證注解
上面的列子只是oval自帶的一些驗(yàn)證,當(dāng)然這里也沒(méi)有列舉完全,如果有興趣可以去查詢其api.基本可以滿足大部分項(xiàng)目需求。但如果需要定義一些特殊的驗(yàn)證規(guī)則這需要我們自己實(shí)現(xiàn)一部分代碼。我這里舉一個(gè)數(shù)據(jù)庫(kù)的字段名是否重復(fù)的驗(yàn)證代碼示例。
注解類:
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) @Constraint(checkWith = UniqueCheck.class) public @interface Unique { ConstraintTarget[] appliesTo() default {ConstraintTarget.VALUES}; String errorCode() default "unique error"; String message() default "field duplicate"; String[] profiles() default {}; int severity() default 0; String target() default ""; String when() default ""; String field(); String tablename(); @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD}) @Constraints public @interface List { net.sf.oval.constraint.Length[] value(); String when() default ""; } }
數(shù)據(jù)庫(kù)驗(yàn)重:
public class UniqueCheck extends AbstractAnnotationCheck{ private String field; private String tablename; private String message; public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context, Validator validator) throws OValException { if (validatedObject == null) return true; String value = valueToValidate.toString(); /** * 在此處將表名,字段,值做數(shù)據(jù)庫(kù)操作 * * if exist ,return false */ return true; } @Override protected Map createMessageVariables() { Map re = Validator.getCollectionFactory().createMap(2); re.put("message", this.message); return re; } @Override public void configure(Unique unique) { super.configure(unique); field = unique.field(); tablename = unique.tablename(); message = unique.message(); } }
至此,你只需要在username上面加上如下注解即可支持字段唯一性驗(yàn)證:
@Unique(field="username",tablename="tb_user",profiles="username",message="數(shù)據(jù)庫(kù)已存在")
執(zhí)行代碼
public static void main(String[] args) { User user = new User("zhangsna"); MyValidator.validator(person, "username"); } static class MyValidator { public staticvoid validator(T t, String... profiles) { Validator v = new Validator(); List message = v.validate(t, profiles); for (ConstraintViolation var : message) { System.out.println(var.getMessage()); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68552.html
摘要:先看效果原諒我的渣像素,進(jìn)度的刻度寬度顏色可以隨意設(shè)定項(xiàng)目地址實(shí)現(xiàn)起來(lái)并不難,通過(guò)本文,我們可以學(xué)到自定義屬性的使用。 showImg(/img/remote/1460000006806723); 先看效果(原諒我的渣像素),進(jìn)度的刻度、寬度、顏色可以隨意設(shè)定: showImg(/img/remote/1460000006806724); showImg(/img/remote/146...
摘要:的自身注解的用法。所以自定義注解的作用很廣。但是在這里,我僅僅基于的來(lái)實(shí)現(xiàn)適用于它的自定義注解。其他的自定義的注解的編寫思路和這個(gè)也是類似的。 基于shiro的自定義注解的擴(kuò)展 根據(jù)我的上一篇文章,權(quán)限設(shè)計(jì)的雜談中,涉及到了有關(guān)于前后端分離中,頁(yè)面和api接口斷開(kāi)表與表層面的關(guān)聯(lián),另辟蹊徑從其他角度找到方式進(jìn)行關(guān)聯(lián)。這里我們主要采取了shiro的自定義注解的方案。本篇文章主要解決以下的...
摘要:閱讀原文造個(gè)輪子我學(xué)到了什么聽(tīng)說(shuō)的最多的是不是不要重復(fù)的造輪子不要被這句話蒙騙了,這句話應(yīng)該還沒(méi)說(shuō)完整,在什么情況下不要造輪子實(shí)際項(xiàng)目中由于工期和質(zhì)量原因,肯定不希望你造輪子,你造輪子花費(fèi)時(shí)間且質(zhì)量不如現(xiàn)有的輪子。 閱讀原文:造個(gè)輪子,我學(xué)到了什么 聽(tīng)說(shuō)的最多的是不是不要重復(fù)的造輪子?不要被這句話蒙騙了,這句話應(yīng)該還沒(méi)說(shuō)完整,在什么情況下不要造輪子?實(shí)際項(xiàng)目中由于工期和質(zhì)量原因,肯定不...
摘要:例子參考自官方文檔,官方文檔的配置有點(diǎn)過(guò)期了,一兩個(gè)屬性不合法。類,測(cè)試類,配置,輸出結(jié)果, 例子參考自官方文檔,http://oval.sourceforge.net/u...官方文檔的xml配置有點(diǎn)過(guò)期了,一兩個(gè)屬性不合法。 ├─src │ ├─main │ │ ├─java │ │ │ └─com │ │ │ └─honey │ │ │ ...
閱讀 3551·2021-11-08 13:15
閱讀 2107·2019-08-30 14:20
閱讀 1386·2019-08-28 18:08
閱讀 977·2019-08-28 17:51
閱讀 1484·2019-08-26 18:26
閱讀 2989·2019-08-26 13:56
閱讀 1484·2019-08-26 11:46
閱讀 2586·2019-08-23 14:22