代码编写中,经常需要判断参数是否为空或者规定格式,如果引用框架现有是方便,如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<String> validataList(Object object){
return validataStrings(object,(String[])null);
}
/**方法二:类中忽略某些字段不校验*/
public static List<String> validataStrings(Object object,String... iStrings){
PropertyDescriptor[] tarDescriptors=BeanUtils.getPropertyDescriptors(object.getClass());
List<String> ignoList=(iStrings!=null?Arrays.asList(iStrings):null);
List<String> 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<String> jiaoyancanshu(@RequestBody ceshientity entity){
//校验全部参数
List<String> 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<String> 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[]
网友评论