注解验证参数的合法性

一、定义需要验证的参数类型

package cn.com.songjy.annotation;

public enum ValidateType {

	NotNull,Length,Number
	
}

二、编写注解类

package cn.com.songjy.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface ValidateAnnotation {

	public ValidateType type();
	
	public String errorMsg();
	
	public int length() default 0;
	
}

三、验证参数

package cn.com.songjy.annotation;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

public class ValidateTools {

	public static boolean validate(Class obj, HttpServletRequest request){
		
		//Map<String, String> errors = (Map<String, String>) request.getAttribute("errors");
		Map<String, String> errors = new HashMap<String, String>();
		
		Field[] fields = obj.getDeclaredFields();
		
		for (Field field : fields) {
			
			//System.out.println(field.getName());//输出所有属性名称
			
			if(field.isAnnotationPresent(ValidateAnnotation.class)){//只处理包含注解为ValidateAnnotation的属性名称
				
				ValidateAnnotation validateUtil = field.getAnnotation(ValidateAnnotation.class);
				ValidateType type = validateUtil.type();
				
				if(ValidateType.NotNull == type)
					if(true == isNull(field.getName(), request))
						errors.put(field.getName(), validateUtil.errorMsg());
				
				if(ValidateType.Length == type)
					if(true == length(field.getName(), request, validateUtil.length()))
						errors.put(field.getName(), validateUtil.errorMsg());
				
				if(ValidateType.Number == type)
					if(true == isNumber(field.getName(), request))
						errors.put(field.getName(), validateUtil.errorMsg());
			}
		}
		
		return errors.size() == 0;
	}
	
	public static boolean isNull(String field, HttpServletRequest request){
		
		if(null==request || null==request.getParameter(field)) return true;
		
		if(0==request.getParameter(field).trim().length()) return true;
		
		return false;
	}
	
	public static boolean length(String field, HttpServletRequest request, int length){
		
		if(null==request || null==request.getParameter(field)) return true;
		
		if(length>request.getParameter(field).trim().length()) return true;
		
		return false;
	}
	
	public static boolean isNumber(String field, HttpServletRequest request){
		
		if(null==request || null==request.getParameter(field)) return true;
		
		try {
			Integer.parseInt(request.getParameter(field));
		} catch (NumberFormatException e) {
			e.printStackTrace();
			return true;
		}
		
		return false;
	}
}

四、在需验证的实体类中添加注解验证

package cn.com.songjy.model;

import cn.com.songjy.annotation.ValidateType;
import cn.com.songjy.annotation.ValidateAnnotation;

public class User {

	@ValidateAnnotation(type=ValidateType.Length, errorMsg="用户名长度不能小于1", length=1)
	private String username;
	
	@ValidateAnnotation(type=ValidateType.Number, errorMsg="年龄必须是数字")
	private int age;
	
	private String[] interest;
	
	public User(){}
	
	public User(String username, int age){
		this.username = username;
		this.age = age;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String[] getInterest() {
		return interest;
	}

	public void setInterest(String[] interest) {
		this.interest = interest;
	}
}

五、在Servlet(Action)调用验证

boolean success = ValidateTools.validate(User.class, request);

 SpringMVC 支持Hibernate Validator:http://my.oschina.net/u/241255/blog/297726

转载于:https://my.oschina.net/sjyroom/blog/141291

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值