后台验证源码java_简单的通用后台校验代码

萌生写这个代码的原因,是在使用struts2的验证框架时,总觉的有些不太灵活。当一个action中有多个表单需要处理的时候,struts处理起来就稍微麻烦一点,当校验失败时都会return "input"字符串。但我不同表单单校验失败后一般都希望返回不同的result,渲染不同的视图。另外如果我的校验是异步发起的,而我想要的结果是json的时候,也比较麻烦。虽然这些问题可以通过修改result type类型和在result中使用ognl表达式来做到,但绕来绕去实在太过麻烦。而若不适用这校验框架,在action中自己来if else if else 来判断更不可取。于是便回想到yii和 laravel框架的校验,这些校验框架在我看来做的非常优秀,非常灵活,于是我想借鉴它们来自己写一写这个校验插件。

希望的效果

首先,我希望做到两点

可以对实体进行校验,不管实体封装的是表单数据还是数据库记录

可以直接对request.getParameterMap()获得的map进行校验,这个我暂时还没完成。

灵活校验,当校验失败后可以马上通过getErrors拿到错误数据,这样你想咋么响应怎么响应,发json也好,把errors传递到视图也好,都可以。

也就是想下面这样,if(!entity.validate()){....}else{Map map = entity.getErrors()}

另外当实体的属性没有被struts填充时,也可以使用我写的一个fill方法进行填充,为什么要写这个呢,因为struts的属性驱动,类驱动,模型驱动都有点局限,但我的action里有多个模型,模型驱动只能为一个模型注值,不够灵活

1 public classBaseEntity{2 public void fill(MapparameterMap) {3 //System.out.println(this.getClass());

4 Class clazz = this.getClass();5 Field fields[] =clazz.getDeclaredFields();6 for (int i = 0; i < fields.length; i++) {7 String fieldName =fields[i].getName();8 //System.out.println(fieldName);

9 try{10 //查找参数集合

11 String values [] =parameterMap.get(fieldName);12 if(values!=null && values.length>0){13 String methodName = "set"+fieldName.substring(0, 1).toUpperCase()14 + fieldName.substring(1);15 Class fieldType =fields[i].getType();16 Method method = clazz.getMethod(methodName,newClass[]{fieldType});17 //设值

18 method.invoke(this,new Object[]{fieldType.cast(values[0])});19 }20 } catch(Exception e) {21 e.printStackTrace();22 }23 }24 }25 ///...

26 }

我把代码放在了svnchina和github上,有兴趣看看的可以去,有一起做的更好了。

http://www.svnchina.com/svn/entity_validator

https://github.com/lvyahui8/validator.git

我暂时只做了对实体的校验,这里还有个问题,java本身是强类型的语言。对于实体的某些字段,他的类型本身就存在了校验,比如一个字段是Integer类型,那你觉得还有必要去校验他是number类型吗?完全多次一举。只有当属性是字符串,校验它是否是number才有意义,比如手机号码

BaseEntity类

这里我写了一个BaseEntity类,如果一个子类要进行校验,那么这个子类要覆写父类的两个方法,rules和labels方法。这两个方法,一个用来定义对该试题的校验规则,一个定义对实体字段的中文翻译。

1 packageorg.lyh.validator;2

3 importjava.lang.reflect.Field;4 importjava.lang.reflect.Method;5 importjava.util.HashMap;6 importjava.util.Map;7

8 /**

9 * Created by lvyahui on 2015-06-27.10 */

11 public classBaseEntity {12

13 private Validator validator = new Validator(this);14

15 protected Map labelMap = new HashMap();16

17 {18 String [][] allLabels =labels();19 if(allLabels != null){20 for(String [] label : allLabels){21 String prop = label[0],propLabel &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值