java annotation 之Spring mvc参数检查

阅读更多

实现Spring mvc参数检查之前,我们先来大概了解一下java annotation:

java.lang.annotation提供了四种元注解,专门注解其他的注解(在自定义注解的时候,需要使用到元注解):

   @Documented –注解是否将包含在JavaDoc中

   @Retention –什么时候使用该注解

   @Target –注解用于什么地方

   @Inherited – 是否允许子类继承该注解

 

  1.)@Retention– 定义该注解的生命周期

  ●   RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。

  ●   RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式

  ●   RetentionPolicy.RUNTIME : 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。

 

  2.)Target – 表示该注解用于什么地方。默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括

  ● ElementType.CONSTRUCTOR:用于描述构造器

  ● ElementType.FIELD:成员变量、对象、属性(包括enum实例)

  ● ElementType.LOCAL_VARIABLE:用于描述局部变量

  ● ElementType.METHOD:用于描述方法

  ● ElementType.PACKAGE:用于描述包

  ● ElementType.PARAMETER:用于描述参数

  ● ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明

 

 3.)@Documented–一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。

 

 4.)@Inherited – 定义该注释和子类的关系

     @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了         @Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

 

好了,有了以上的介绍,现在开始进入正题:

1.先自定义一个注解类:

 

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IsNotNull {
	String value() default "";
}

 2. 再写一个解析注解的工具类:

 

 

import java.lang.reflect.Field;

public class MyAnnotationUtil {
	 public static String getIsNotNullInfo(Object obj){
		 try {
			 Class clazz = obj.getClass();
			//获得私有的成员属性
	         Field[] fields = clazz.getDeclaredFields();
	         if(fields!=null && fields.length>0){
	             for(Field f : fields){
	                 f.setAccessible(true);
	                 System.out.println(f.getName());
	                 //判断IsNotNull注解是否存在
	                 if(!f.isAnnotationPresent(IsNotNull.class)){
	                	 System.out.println(f.getName()+">>>>>"+f.isAnnotationPresent(IsNotNull.class));
	                     continue;
	                 }else {
	                	 System.out.println(f.getName()+">>>>>"+f.isAnnotationPresent(IsNotNull.class));
	                	 IsNotNull isNotNull = f.getAnnotation(IsNotNull.class);
	                     if(f.get(obj)==null || "".equals(f.get(obj))){
	                    	 System.out.println(isNotNull.value());
	                         return isNotNull.value();
	                     }
	                 }
	             }
	         }
		 }catch (Exception e){
	            return null;
	        }
		 return null;
	 }

 3.好了,最后进行Spring mvc参数检查的实现:

 

    3.1 定义一个view,加入定义注解

     

public class Item implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 8663198447200449568L;

	@IsNotNull("名字不能为空")
	private String name;
	
	@IsNotNull("密码不能为空")
	private String pwd;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
}

   3.1 实现Controller

 

   

@RestController
public class MemberController {

	@RequestMapping(value="/getUserList",method=RequestMethod.POST)
	public List getUserList(@RequestBody Item item) {
		String string = MyAnnotationUtil.getIsNotNullInfo(item);
                System.out.println(string);
		if(string!=null){ //如果参数错误,直接返回
			List listUser = new ArrayList();
			listUser.add(string);
			return listUser;
		}
		System.out.println(item.getName() );
		List listUser = new ArrayList();
		listUser.add("zhangsan");
		listUser.add("lisi");
		listUser.add("yushengjun");
		System.out.println("你调用了一次>>>>>>>");
		return listUser;
	}

	
}

 

 

好了,以上就是java annotation 之Spring mvc参数检查的简单实现。。。。。

大家还可以自定义更多的注解来检查参数,比如:对邮箱,对手机号,对身份证等等。。。。。

你可能感兴趣的:(java,annotation,Spring,mvc,参数检查)