作者:郝春利
转贴请注明出处!
powered by http://www.loveapple.cn
接上回:
我的设想就是在被验证的方法前面添加注释标签,然后通过标签的定义规则,验证向方法传入的引数。
那么,首先是Java标签的定义。
在loveapple服务器端XML-RPC接口将对外部公开,所以,需要系统对流入接口的数据进行严格的验证。
为了方便与其他预言的兼容,通过XMl传入服务器的数据将有以下三种:
针对于流入数据的特性,在Java中将定义以下几种注释:
具体代码如下:
其中,ValidationIsList的变量中,指定被判断的引数中,哪一个是List;ValidationIsStructure指定被判断的引数中,哪一个是Map(构造体);ValidationPojoType指定被判断的引数将遵循的POJO型是什么;ValidationProperty制定某个属性将遵循某个规则。
如果是判断List或者Map(构造体)属性的规则,可以在ValidationProperty中以“a.b.c”的形式制定规则变化。
代序
转贴请注明出处!
powered by http://www.loveapple.cn
接上回:
我的设想就是在被验证的方法前面添加注释标签,然后通过标签的定义规则,验证向方法传入的引数。
那么,首先是Java标签的定义。
在loveapple服务器端XML-RPC接口将对外部公开,所以,需要系统对流入接口的数据进行严格的验证。
为了方便与其他预言的兼容,通过XMl传入服务器的数据将有以下三种:
- Java的基本型
- Map
- List
XML-RPC型与Java型对照表:http://ws.apache.org/xmlrpc/types.html
针对于流入数据的特性,在Java中将定义以下几种注释:
- 验证某个属性是否为List
- 验证某个属性是否为Map(构造体)
- 验证是否遵循POJO型
- 验证某个属性是否符合某个验证规则
具体代码如下:
- package cn.loveapple.common.validation.annotation;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- * Indicates that a method's parameter is a List.<br>
- *
- * @author loveapple
- * @since 2008/08/22
- * @version $Revision:$
- */
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface ValidationIsList {
- /**
- * Target element
- * @return
- */
- String[] value();
- }
- package cn.loveapple.common.validation.annotation;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- * Indicates that a method's parameter is a Structure.<br>
- *
- * @author loveapple
- * @since 2008/08/22
- * @version $Revision:$
- */
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface ValidationIsStructure {
- /**
- * Target element
- * @return
- */
- String[] value();
- }
- package cn.loveapple.common.validation.annotation;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- * Indicates that a method's parameter and POJO type mapping.<br>
- *
- * @author loveapple
- * @since 2008/08/22
- * @version $Revision:$
- */
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface ValidationPojoType {
- /**
- * The tied POJO
- * @return
- */
- @SuppressWarnings("unchecked")
- Class value();
- }
- package cn.loveapple.common.validation.annotation;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- * Indicates that a method's parameter validation declaration.<br>
- * example, the length validation @ValidationProperty("element1$length$10","element2$number")
- *
- * @author loveapple
- * @since 2008/08/22
- * @version $Revision:$
- */
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface ValidationProperty {
- /**
- * Validation target name and validation rule name and parameter
- * @return
- */
- String[] value();
- }
如果是判断List或者Map(构造体)属性的规则,可以在ValidationProperty中以“a.b.c”的形式制定规则变化。
代序