参数验证工具

简介: 参数验证工具

引言

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

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

实现

注解

定义一个自定义注解

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定义

判断


相关文章
|
7月前
|
前端开发 算法 安全
轻松愉悦的验证方式:实现图片旋转验证功能
轻松愉悦的验证方式:实现图片旋转验证功能
196 0
|
4月前
|
JSON Java 测试技术
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
85 0
|
7月前
|
数据采集 存储 安全
数据功能验证
数据功能验证
119 4
|
7月前
|
SQL 测试技术 数据安全/隐私保护
密码组件校验规则该如何测试?
密码组件校验规则该如何测试?
103 0
|
7月前
表单常用验证数据类型,验证一切(checkEverything)
表单常用验证数据类型,验证一切(checkEverything)
|
测试技术
loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取Part 2
loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取Part 2
126 0
|
前端开发
前端工作小结73-进行输入成功后验证
前端工作小结73-进行输入成功后验证
70 0
|
SQL 安全 数据库
基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误
一数据库服务器(SQL Server 2014)上的一个作业执行报错,具体错误信息如下:   Executed as user: NT SERVICE\SQLSERVERAGENT. 用户 &#39;xxxx\xxxxx$&#39; 登录失败。
1953 0
基于令牌的服务器访问验证失败,出现基础结构错误。请检查以前的错误
|
Python 数据格式 JSON
文件完整性hash验证demo(python脚本)
一个简单的文件完整性hash验证脚本 #!/usr/bin/env python # -*- coding: utf-8 -*- import os import hashlib import json #网站目录所有文件列表 path_list=[] #静态文件可以不做hash效验 White_list=['.
1375 0
|
开发工具
【esayui】扩展验证方法,控件验证
基础验证 //页面调用方法$.extend($.fn.validatebox.defaults.rules, { 验证电话 IsPhoneRex: {validator: function (value) {var rex = /^1[3-8]+\d{9}$/;var rex2 = /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;if (rex.
1035 0