参数验证工具

简介: 参数验证工具

引言

参数校验始终不会少,但是如何让代码更加简洁?令人深思

接下来介绍一个参数验证工具

实现

注解

定义一个自定义注解

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

/**
 * 参数非空注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD })
public @interface NotEmpty {

    /**
     * 是否非空。<br>
     *
     * @return
     */
    boolean value() default true;

    /**
     * 错误信息描述 默认提示fieldName非空
     * @return
     */
    String message() default "";

}

判断工具

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

import com.alibaba.common.lang.StringUtil;
import com.alibaba.global.ad.core.client.annotation.NotEmpty;
import com.alibaba.global.ad.core.client.common.exception.ServiceException;
import com.alibaba.global.ad.core.client.common.result.ResultCode;

import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;

/**
 * 断言检查工具类
 * 抽象,防止直接实例化
 *
 */
public class GenericCheckUtil {

    /**
     * 是有构造,防止被实现
     */
    private GenericCheckUtil() {
    }

    /**
     * 校验参数(推荐)
     *
     * @param param 不能为空
     */
    public static void check(Object param) {
        if (param == null) {
            throw new ServiceException(ResultCode.ILLEGAL_PARAM);
        }
        for (Field field : param.getClass().getDeclaredFields()) {
            field.setAccessible(true);
            NotEmpty notEmpty = field.getAnnotation(NotEmpty.class);
            if (notEmpty == null || !notEmpty.value()) {
                continue;
            }
            Object value;
            try {
                value = field.get(param);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
            // null判断
            if (value == null) {
                throwException(field, notEmpty);
            }
            // String判断
            if (value instanceof String && StringUtil.isBlank((String)value)) {
                throwException(field, notEmpty);
            }
            // 集合判断
            if (value instanceof Collection && CollectionUtils.isEmpty((Collection<?>)value)) {
                throwException(field, notEmpty);
            }
            if (value instanceof Map && CollectionUtils.isEmpty((Map)value)) {
                throwException(field, notEmpty);
            }
        }
    }

    /**
     * 抛出异常
     *
     * @param field
     * @param notEmpty
     */
    private static void throwException(Field field, NotEmpty notEmpty) {
        throw new ServiceException(ResultCode.ILLEGAL_PARAM,
            StringUtil.isBlank(notEmpty.message()) ? field.getName() + "不能为空" : notEmpty.message());
    }

}

使用

DTO定义

判断


相关文章
|
1月前
|
前端开发 算法 安全
轻松愉悦的验证方式:实现图片旋转验证功能
轻松愉悦的验证方式:实现图片旋转验证功能
74 0
|
8月前
|
数据安全/隐私保护
fastadmin中写接口是时Validate规则验证自定义如何用
fastadmin中写接口是时Validate规则验证自定义如何用
|
1月前
|
数据采集 存储 安全
数据功能验证
数据功能验证
49 4
|
1月前
|
SQL 测试技术 数据安全/隐私保护
密码组件校验规则该如何测试?
密码组件校验规则该如何测试?
|
9月前
|
JavaScript 数据安全/隐私保护
某易云音乐登录参数分析
某易云音乐登录参数分析
54 0
|
测试技术
loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取
loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取
95 0
|
调度 计算机视觉 异构计算
可用的SRIO RapidIO (SRIO)验证平台
目前具备SRIO接口的硬件不多,推荐广州星嵌电子科技有限公司开发的DSP+FPGA+RAM开发板: http://web.xines.cn/pingguban/28.html ,也可用于评估EMIF等接口。
可用的SRIO RapidIO (SRIO)验证平台
|
前端开发
前端工作小结73-进行输入成功后验证
前端工作小结73-进行输入成功后验证
47 0
|
自然语言处理 前端开发 安全
参数校验优雅实践
希望本文可以帮助到大家,可以用一种优雅方式接入参数校验,保护系统解放自身,从你我做起!
参数校验优雅实践
|
SQL 安全 数据库
基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误
一数据库服务器(SQL Server 2014)上的一个作业执行报错,具体错误信息如下:   Executed as user: NT SERVICE\SQLSERVERAGENT. 用户 'xxxx\xxxxx$' 登录失败。
1898 0