非空参数校验的工具类
2016-01-15 00:00
316 查看
自己在写代码的时候,一般都是先对入参进行校验,经常会写如下这种代码(日志打印非常重要,BusinessException是我自己定义的异常)
按照上面的写法其实没有错,但是会增加代码量,会有一点影响可读性,所以今天就写了一个公用的非空参数校验(草版,目前写得比较简陋,而且只支持非空校验)。
VadidatorUtils.java:
调用方式如下,参数校验不通过会抛出异常,需要自己处理,我使用的spring mvc的统一异常处理
本来我是想把方法定义成下面这样
然后看是否能够通过反射,得到形参的名字,结果找了些方法,不太理想,所以暂时将方法定义成需要传入形参名字(以便打印日志),以后有时间再仔细研究下获得形参的方法。
Fighting.
if (StringUtils.isBlank(userId)) { LOGGER.warn("【参数userId为空】"); throw new BusinessException(ErrorCode.NULL_ARGUMENT, "参数userId为空"); } if (StringUtils.isBlank(oldPassword)) { LOGGER.warn("【参数oldPassword为空】"); throw new BusinessException(ErrorCode.NULL_ARGUMENT, "参数oldPassword为空"); } if (StringUtils.isBlank(newPassword)) { LOGGER.warn("【参数newPassword为空】"); throw new BusinessException(ErrorCode.NULL_ARGUMENT, "参数newPassword为空"); }
按照上面的写法其实没有错,但是会增加代码量,会有一点影响可读性,所以今天就写了一个公用的非空参数校验(草版,目前写得比较简陋,而且只支持非空校验)。
VadidatorUtils.java:
/** * */ package com.hpe.core.utils; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; /** * 校验工具类 * @author luolin * * @version $id:VadidatorUtils.java,v 0.1 2016年1月15日 下午4:34:43 luolin Exp $ */ public class ValidatorUtils { /** 日志 */ private static final Logger LOGGER = Logger.getLogger(ValidatorUtils.class); /** * 参数为空校验 * @param logger {@link Logger} * @param params 要校验的参数数组 * @param paramNames 和参数数组匹配的形参的名字,用于打印日志 * @Author : luolin. create at 2016年1月15日 下午4:55:30 */ @SuppressWarnings("rawtypes") public static void notNullParam(Object[] params, String[] paramNames) { LOGGER.info("【参数非空校验】"); if (ArrayUtils.isEmpty(params) || ArrayUtils.isEmpty(paramNames)) { LOGGER.info("【没有需要校验的参数】"); return; } StringBuffer message = new StringBuffer(); int nullParamIndex = -1; for (int i = 0, len = params.length; i < len; i++) { if (params[i] == null) { nullParamIndex = i; break; } if (params[i] instanceof String) { if (StringUtils.isBlank((String) params[i])) { nullParamIndex = i; break; } continue; } else if (params[i] instanceof List) { if (CollectionUtils.isEmpty((Collection) params[i])) { nullParamIndex = i; break; } continue; } else if (params[i].getClass().isArray()) { if (ArrayUtils.isEmpty((Object[]) params[i])) { nullParamIndex = i; break; } continue; } else if (params[i] instanceof Map) { if (MapUtils.isEmpty((Map) params[i])) { nullParamIndex = i; break; } continue; } } if (nullParamIndex < 0) { return; } message.append(String.format("【参数%s为空】", paramNames[nullParamIndex])); LOGGER.warn(message); throw new NullArgumentException(paramNames[nullParamIndex]); } }
调用方式如下,参数校验不通过会抛出异常,需要自己处理,我使用的spring mvc的统一异常处理
ValidatorUtils.notNullParam(new String[] { userId, oldPassword, newPassword }, new String[] { "userId", "oldPassword", "newPassword" });
本来我是想把方法定义成下面这样
public static void notNullParam(Object... param) { // TODO }
然后看是否能够通过反射,得到形参的名字,结果找了些方法,不太理想,所以暂时将方法定义成需要传入形参名字(以便打印日志),以后有时间再仔细研究下获得形参的方法。
Fighting.
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树