活用Java6注释功能实现验证机制[二]

作者:郝春利
转贴请注明出处!
powered by http://www.loveapple.cn

接上回:

我的设想就是在被验证的方法前面添加注释标签,然后通过标签的定义规则,验证向方法传入的引数。

那么,首先是Java标签的定义。
在loveapple服务器端XML-RPC接口将对外部公开,所以,需要系统对流入接口的数据进行严格的验证。
为了方便与其他预言的兼容,通过XMl传入服务器的数据将有以下三种:
  1. Java的基本型
  2. Map
  3. List
XML-RPC型与Java型对照表:http://ws.apache.org/xmlrpc/types.html

针对于流入数据的特性,在Java中将定义以下几种注释:
  1. 验证某个属性是否为List
  2. 验证某个属性是否为Map(构造体)
  3. 验证是否遵循POJO型
  4. 验证某个属性是否符合某个验证规则

具体代码如下:
  1. package cn.loveapple.common.validation.annotation;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. /**
  7.  * Indicates that a method's parameter is a List.<br>
  8.  * 
  9.  * @author loveapple
  10.  * @since 2008/08/22
  11.  * @version $Revision:$
  12.  */
  13. @Target(ElementType.METHOD)
  14. @Retention(RetentionPolicy.RUNTIME)
  15. public @interface ValidationIsList {
  16.     /**
  17.      * Target element
  18.      * @return
  19.      */
  20.     String[] value();
  21. }
  22. package cn.loveapple.common.validation.annotation;
  23. import java.lang.annotation.ElementType;
  24. import java.lang.annotation.Retention;
  25. import java.lang.annotation.RetentionPolicy;
  26. import java.lang.annotation.Target;
  27. /**
  28.  * Indicates that a method's parameter is a Structure.<br>
  29.  * 
  30.  * @author loveapple
  31.  * @since 2008/08/22
  32.  * @version $Revision:$
  33.  */
  34. @Target(ElementType.METHOD)
  35. @Retention(RetentionPolicy.RUNTIME)
  36. public @interface ValidationIsStructure {
  37.     /**
  38.      * Target element
  39.      * @return
  40.      */
  41.     String[] value();
  42. }
  43. package cn.loveapple.common.validation.annotation;
  44. import java.lang.annotation.ElementType;
  45. import java.lang.annotation.Retention;
  46. import java.lang.annotation.RetentionPolicy;
  47. import java.lang.annotation.Target;
  48. /**
  49.  * Indicates that a method's parameter and POJO type mapping.<br>
  50.  * 
  51.  * @author loveapple
  52.  * @since 2008/08/22
  53.  * @version $Revision:$
  54.  */
  55. @Target(ElementType.METHOD)
  56. @Retention(RetentionPolicy.RUNTIME)
  57. public @interface ValidationPojoType {
  58.     /**
  59.      * The tied POJO
  60.      * @return
  61.      */
  62.     @SuppressWarnings("unchecked")
  63.     Class value();
  64. }
  65. package cn.loveapple.common.validation.annotation;
  66. import java.lang.annotation.ElementType;
  67. import java.lang.annotation.Retention;
  68. import java.lang.annotation.RetentionPolicy;
  69. import java.lang.annotation.Target;
  70. /**
  71.  * Indicates that a method's parameter validation declaration.<br>
  72.  * example, the length validation @ValidationProperty("element1$length$10","element2$number")
  73.  * 
  74.  * @author loveapple
  75.  * @since 2008/08/22
  76.  * @version $Revision:$
  77.  */
  78. @Target(ElementType.METHOD)
  79. @Retention(RetentionPolicy.RUNTIME)
  80. public @interface ValidationProperty {
  81.     /**
  82.      * Validation target name and validation rule name and parameter
  83.      * @return
  84.      */
  85.     String[] value();
  86. }
其中,ValidationIsList的变量中,指定被判断的引数中,哪一个是List;ValidationIsStructure指定被判断的引数中,哪一个是Map(构造体);ValidationPojoType指定被判断的引数将遵循的POJO型是什么;ValidationProperty制定某个属性将遵循某个规则。
如果是判断List或者Map(构造体)属性的规则,可以在ValidationProperty中以“a.b.c”的形式制定规则变化。


代序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值