文档章节

注解验证参数的合法性

冰玉翔龙
 冰玉翔龙
发布于 2013/06/29 15:52
字数 394
阅读 522
收藏 3

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

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

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

© 著作权归作者所有

冰玉翔龙
粉丝 3
博文 22
码字总数 2475
作品 0
杭州
高级程序员
私信 提问
加载中

评论(1)

hint
hint
蛮好的
实用———springmvc接收参数校验

https://www.cnblogs.com/funyoung/p/8670550.html https://www.cnblogs.com/monkeydai/p/10068547.html Hello@ 两粒种子,一片森林. 首页 新随笔 联系 订阅 管理 随笔 - 21 文章 - 0 评论 - ......

osc_td5zc8kl
2019/09/10
6
0
playframework 1.2.4 的 Validation

验证参数的有效性和合法性是web开发过程中一项十分重要但十分繁琐枯燥重复的工作,今天更新一篇关于如果使用Validation简化验证程序的随笔。 先说说之前的做法:ajax提交表单-----> 后台验证...

专业写BUG的程序员
2019/01/22
37
0
SpringMVC--使用hibernate validator数据校验

JSR 303 Spring3开始支持JSR 303 验证框架,JSR303是Java为Bean数据合法性校验所提供的标准框架。JSR 303 支持XML和注解风格的验证,通过在Bean属性上标注类似于@NotNull等的标准注解指定校验...

osc_20n6g71c
2019/11/29
1
0
基于springboot创建RESTful风格接口

基于springboot创建RESTful风格接口 RESTful API风格 特点: URL描述资源 使用HTTP方法描述行为。使用HTTP状态码来表示不同的结果 使用json交互数据 RESTful只是一种风格,并不是强制的标准 ...

JS_HCX
2018/04/27
0
0
使用Hibernate-Validation进行参数验证

在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用。 1.引入hibernate-validator依赖 <depende...

晨猫
2018/09/18
93
0

没有更多内容

加载失败,请刷新页面

加载更多

【JAVA习题五】将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

import java.util.Scanner;public class Fenjieshu分解数 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner n=new Scanner(Sy......

osc_7rnzlqhm
30分钟前
24
0
Eclipse 安装Web Service、Axis2插件

Eclipse 安装Web Service、Axis2插件 一. 下载Apache Axis2及相关插件 下载地址: http://axis.apache.org/axis2/java/core/download.cgi 二. 解压 axis2-eclipse-codegen-plugin-1.7.3.zip......

osc_8hwmnuba
32分钟前
37
0
CAD如何输入文本?迅捷CAD编辑器文本输入更快捷

在CAD文件中,如何输入文本呢?相信很多小伙伴们,对于如何使用“迅捷CAD编辑器”给CAD文件输入文本,还是有些不够清楚的。那么,下面小编就给小伙伴们分享一下,如何使用它更快捷地输入文本...

深蓝月上
32分钟前
27
0
【金融】京东白条分期支付业务流程

1.京东白条分期支付业务流程 2.京东白条分期支付前端页面截图(H5) 2.1 京东商城 京东商城仅商详模块展示白条分期详情。包含: 2.2 京东数科(收银台) 2.2.1 判断是否登录 如果用户未登录,...

osc_wxsc35it
33分钟前
20
0
PDF怎么修改表单?高效办公就选这款PDF编辑器软件

在PDF文档中,怎么进行修改表单的操作呢?想要高效率的办公,小伙伴们就选择这款PDF编辑器软件吧。当面对一些需要进行修改表单操作的PDF文档,办公室小伙伴们是不是经常会感觉到头疼,不知道...

开源86
33分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部