在项目开发中判空是很常见的事,有时候来自前端页面的表单需要挨个判空,如果挨个“null == object”就会变得很臃肿,针对这种情况对判空做个简化。
这是java8的判空方法,一行搞定
public static void checkParam(Object obj, String message) {
Optional.ofNullable(obj).orElseThrow(() -> new RuntimeException(message));
}
那JavaBean呢?需要获取先获取属性名和属性值,通过下面的两个方法实现
public static List<Map> getFiledsInfo(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
List<Map> list = new ArrayList<>();
Map<String, Object> infoMap = null;
for (int i = 0; i < fields.length; i++) {
infoMap = new HashMap<>();
infoMap.put("type", fields[i].getType().toString());
infoMap.put("name", fields[i].getName());
infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
list.add(infoMap);
}
return list;
}
public static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[]{});
Object value = method.invoke(o, new Object[]{});
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
这是我定义的一个测试类
@Data
public class DCAGPPDFParam {
private String payeac;
private String begdat;
private String enddat;
private String buscod;
private String busmod;
private String prtmod;
private String begidx;
private String eacnam;
private String ptyref;
private String minamt;
private String maxamt;
private String pagsiz;
}
通过“getFiledsInfo”方法很容易获取JavaBean的属性名称、值、类型 再者对JavaBean的属性挨个判空就可以了,通过下面这个方法实现
public static void checkBean(Object obj, List<String> emptyFiledList, String message) {
checkParam(obj, (StringUtils.isBlank(message) ? "对象" : message) + "为空!");
emptyFiledList = null != emptyFiledList ? emptyFiledList : new ArrayList<>();
List<Map> objectInfoList = ReflectHelper.getFiledsInfo(obj);
for (Map objectInfo : objectInfoList) {
String name = (String) objectInfo.get("name");
if (!emptyFiledList.contains(name)) {
checkParam(objectInfo.get("value"), (StringUtils.isBlank(message) ? "对象的" : message + "的") + "【" + name + "】属性为空!");
}
}
}
最后做个测试 搞定,接下来可以对项目中的表单的判空做个简化了。
|