手写校验参数格式工具类

代码编写中,经常需要判断参数是否为空或者规定格式,如果引用框架现有是方便,如spring的Validator注解等等,但是也会有不能引用第三方等的规定,那就手写一个工具类。
工具类ValidataUtils:
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;


public class ValidataUtils {
    /**方法一,类中所有字段全部校验*/
public static List validataList(Object object){
    return validataStrings(object,(String[])null);
}
/**方法二:类中忽略某些字段不校验*/
public static List validataStrings(Object object,String... iStrings){
    PropertyDescriptor[] tarDescriptors=BeanUtils.getPropertyDescriptors(object.getClass());
    List ignoList=(iStrings!=null?Arrays.asList(iStrings):null);
    List errorlist=new ArrayList<>();
    //获取调用者的方法名
    String methodName=new Exception().getStackTrace()[1].getMethodName();
    System.out.println("上层调用方法为:"+methodName);
    //获取调用者的类名
    String className=new Exception().getStackTrace()[1].getClassName();
    System.out.println("上层调用类为:"+className);
    for(PropertyDescriptor tarDescriptor:tarDescriptors) {
        Method readmethod=tarDescriptor.getReadMethod();
        if(readmethod!=null&&(ignoList==null||!ignoList.contains(tarDescriptor.getName()))) {
            try {
                if(Modifier.isPublic(readmethod.getDeclaringClass().getModifiers())) {
                    readmethod.setAccessible(true);
                }
                Object valueObject=readmethod.invoke(object);
                if(valueObject instanceof String) {
                    if(StringUtils.isEmpty((String)valueObject)) {
                        errorlist.add(object.getClass().getSimpleName()+"方法参数中的:"+tarDescriptor.getName()+"不能为空");
                        continue;
                    }
                }
                if(valueObject instanceof Integer) {
                    if((int)valueObject<0||(int)valueObject==0) {
                        errorlist.add(object.getClass().getSimpleName()+"方法中的参数:"+tarDescriptor.getName()+"不能为0");
                    }
                }
                if(valueObject==null) {
                    errorlist.add(object.getClass().getSimpleName()+"方法参数中的:"+tarDescriptor.getName()+"不能为空");
                }
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    return errorlist;
}
}
接口层使用
import java.util.List;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.king.ruansudemo.entity.ceshientity;
import com.king.ruansudemo.util.ValidataUtils;

@RestController
@RequestMapping("/canshu")
public class validataController {
    @RequestMapping("/jiaoyan")
    public List jiaoyancanshu(@RequestBody ceshientity entity){
        //校验全部参数
        List list=ValidataUtils.validataList(entity);
        if(list.size()>0) {
            System.out.println(1);
        }else {
            System.out.println(2);
        }
        String zhiString=list.toString();
        System.out.println(zhiString);
        //忽略部分不需校验参数
        //List list=ValidataUtils.validataStrings(entity,new String[] {"one","two"});
        return list;
    }
}

实体类
public class ceshientity {
private String one;
private String two;
private int hello;
public String getOne() {
    return one;
}
public int getHello() {
    return hello;
}
public void setHello(int hello) {
    this.hello = hello;
}
public void setOne(String one) {
    this.one = one;
}
public String getTwo() {
    return two;
}
public void setTwo(String two) {
    this.two = two;
}
}

拿来即用,还有关于参数String... iStrings,传参使用方法如下:

1.validataStrings(entity,new String[] {"one","two"})
2.validataStrings(entity,"one","two")
String... 就是表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]

你可能感兴趣的:(手写校验参数格式工具类)