一、背景
最近在写代码判断实体类是否为空时,发现没有一个公用的方法去调用。只能使用判断某个字段是否为空,不能判断实体类所有的字段,因此想到了去写一个方法去判断实体类中是否有任一个字段为空。
二、问题与构思
首先想到的是使用Java反射去遍历所有的字段值,但是后来加入了嵌套字段就必须进行递归。为了省去不必要的麻烦,去问了一下小助手,使用了fasterxml.jackson的包,使用JsonNode去构建实体类的参数树。
三、相关代码
import cn.hutool.json.JSONConfig;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
......
/**
*
* 判断实体类是否所有字段值为空
*
*
* @param entity 实体类
* @return true/false
*/
public static <T> boolean isAllFieldsValueNotNull(T entity) {
try {
String s = JSONUtil.toJsonStr(entity, JSONConfig.create().setIgnoreNullValue(false));
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(s);
if (jsonNode.isObject() && !isNestedJsonObjectNotNull(jsonNode)) {
return false;
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
private static boolean isNestedJsonObjectNotNull(JsonNode jsonNode) {
if (jsonNode.isNull()) {
return false;
}
else if (jsonNode.isObject()) {
for (JsonNode childNode : jsonNode) {
if (!isNestedJsonObjectNotNull(childNode)) {
return false;
}
}
}
return true;
}
四、总结
写代码时要简化递归语句、简化时间复杂度、方法注释简洁易懂。