java非空性校验_非空参数校验的工具类

自己在写代码的时候,一般都是先对入参进行校验,经常会写如下这种代码(日志打印非常重要,BusinessException是我自己定义的异常)

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.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值