码迷,mamicode.com
首页 > 其他好文 > 详细

对前台传过来的实体是否为空 进行为空校验的N种方法

时间:2019-02-13 00:43:54      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:意思   object   common   cat   需要   注解   class   eric   @param   

首先定义一个注解,如下

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

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamNotNull {
}

  

简单解释一下,interface前面加@的意思是:

@interface 不是interface,是注解类
是jdk1.5之后加入的,java没有给它新的关键字,所以就用@interface 这么个东西表示了
这个注解类,就是定义一个可用的注解,包括这个注解用于什么地方,是类,还是方法,还是property,还是方法入参等等,还有这个注解是否编译后进入class
比如我们知道的用于javadoc的注解,是不进入class文件的。然后在后面你就可以用这个注解写代码了。
总的来说,这就是一个生成javadoc时用到的注释类

 

 



/**
* 对非空参数进行校验,使用注解
* @param model javabean 对象
* @throws ClassNotFoundException
*/
public static CheckResult parameterIsNotNull(Object model) {
try {
Field[] fields = model.getClass().getDeclaredFields();
boolean flag = true;
String fieldstr = "字段:";
for (Field field : fields) {
ParamNotNull annotation = field.getAnnotation(ParamNotNull.class);
if(annotation != null){
String name = field.getName();
if(!chechFiled(model,name,field)){
flag = false;
fieldstr = fieldstr + name + " ";
}
}
}
if(flag){//校验通过
return new CheckResult(true);
}else {//有参数校验不通过
return new CheckResult(ApiResponse.error(Syscode.PARAMETER_ERROR,fieldstr+"不能为空!"));
}
}catch (Exception e){
LOG.error(CheckParameter.class,"对非空参数进行校验时异常 e: " + e.getMessage());
return new CheckResult(ApiResponse.error(Syscode.SYSTEM_EXCEPTION));
}
}

private static boolean chechFiled(Object model,String name,Field field) throws Exception{
boolean flag = true;
name = name.substring(0,1).toUpperCase()+name.substring(1); //将属性的首字符大写,方便构造get,set方法
String type = field.getGenericType().toString(); //获取属性的类型
if(type.equals("class java.lang.String")){ //如果type是类类型,则前面包含"class ",后面跟类名
Method m = model.getClass().getMethod("get"+name);
String value = (String) m.invoke(model); //调用getter方法获取属性值
if(StringUtils.isBlank(value)){
flag = false;
}
}else {
Method m = model.getClass().getMethod("get"+name);
Object value = m.invoke(model);
if(value == null){
flag = false;
}
}
return flag;
}


或者只使用反射机制

/**
* 对非空参数进行校验
* @param model javabean 对象
* @param unCheckField 不校验的字段
* @return
*/
public static CheckResult parameterIsNotNull(Object model, Set<String> unCheckField){
try {
boolean flag = true;
String fieldstr = "字段:";
Field[] field = model.getClass().getDeclaredFields(); //获取实体类的所有属性,返回Field数组
for(int j=0 ; j<field.length ; j++){ //遍历所有属性
String name = field[j].getName(); //获取属性的名字
if(unCheckField.contains(name)){
continue;//不需要校验此字段
}
if(!chechFiled(model,name,field[j])){
flag = false;
fieldstr = fieldstr + name + " ";
}
}
if(flag){//校验通过
return new CheckResult(true);
}else {//有参数校验不通过
return new CheckResult(ApiResponse.error(Syscode.PARAMETER_ERROR,fieldstr+"不能为空!"));
}
}catch (Exception e){
LOG.error(CheckParameter.class,"对非空参数进行校验时异常 e: " + e.getMessage());
return new CheckResult(ApiResponse.error(Syscode.SYSTEM_EXCEPTION));
}
}

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.yucheng.cmis.channel.stagedaccess.domain.MapsStagedMaintainInfo;
/**
* 校验参数是否为空
* @author xr
* @param model:参数所在的实体类 paramList:要校验的参数
*
*/
public class ParamCheck {
public static boolean isNotBlank(Object model,List<String> paramList) throws Exception, Exception {
boolean flag = true;
String params = "";
String param = "";
for(int i=0;i<paramList.size();i++) {
params = paramList.get(i);
if (params.indexOf("_") < 0) {
params = params.substring(0,1).toUpperCase()+params.substring(1); //将属性的首字符大写,方便构造get,set方法
System.out.println(params);
Method m = model.getClass().getMethod("get"+params);
String value = (String) m.invoke(model); //调用getter方法获取属性值
if(StringUtils.isBlank(value)){
flag = false;
return flag;
}
} else {
String[] strs = params.split("_");
for (int j=0;j<strs.length;j++) {
params = strs[j].substring(0,1).toUpperCase()+strs[j].substring(1); //将属性的首字符大写,方便构造get,set方法
param += params;
System.out.println(param);
}
Method m = model.getClass().getMethod("get"+param);
String value = (String) m.invoke(model); //调用getter方法获取属性值
if(StringUtils.isBlank(value)){
flag = false;
return flag;
}
}
}
return flag;
}
public static void main(String[] args) throws Exception {
//维护人员信息
MapsStagedMaintainInfo mainInfo = new MapsStagedMaintainInfo();
//mainInfo.setHead("aa");
mainInfo.setBusiManagerStore("bbb");
List<String> paramList = new ArrayList<String>();
paramList.add("head");
paramList.add("busi_manager_store");
boolean result = ParamCheck.isNotBlank(mainInfo, paramList);
System.out.println(result);
}

对前台传过来的实体是否为空 进行为空校验的N种方法

标签:意思   object   common   cat   需要   注解   class   eric   @param   

原文地址:https://www.cnblogs.com/qianjinyan/p/10367612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!