將Java物件vo中屬性為null的轉為""
阿新 • • 發佈:2019-01-29
背景:之所以寫這個方法,是因為在用ireport進行列印的時候,如果你查詢的結果,實體中的屬性為null,那麼列印預覽的時候會顯示一個null,按照要求null是不應該顯示,只需要顯示空白就可以。寫的這個方法就解決了列印時查詢的結果中有的實體的屬性值為null的現象
public static Object checkNull(Object vo) throws Exception {
// 獲取實體類的所有屬性,返回Field陣列
Field[] field = vo.getClass().getDeclaredFields();
// 獲取屬性的名字
for (int i = 0; i < field.length; i++) {
//可訪問私有變數
field[i].setAccessible(true);
// 獲取屬性的名字
String name = field[i].getName();
// 獲取屬性型別
String type = field[i].getGenericType().toString();
// 將屬性的首字母大寫
name = name.replaceFirst(name.substring(0 , 1), name.substring(0, 1)
.toUpperCase());
if (type.equals("class java.lang.String")) {
// 如果type是類型別,則前面包含"class ",後面跟類名
Method m = vo.getClass().getMethod("get" + name);
// 呼叫getter方法獲取屬性值
String value = (String) m.invoke(vo);
if (!StringUtils.hasValue(value)) {
//給屬性設值
field[i].set(vo, field[i].getType().getConstructor(field[i].getType()).newInstance(""));
}
}
}
return vo;
}
彩蛋:其實最後我發現,可以不用寫這個方法,可以直接在模板進行勾選和設定,如下圖所示: