簡單說下這個用處:我們在實際代碼中經(jīng)常直接直接dao層 操作實體類。這樣得出來的返回結(jié)果其實是一個實體類或者說實體類列表。
這種情況雖然我們可以用一個vo去封裝一下再返回。但是麻煩也是真的麻煩、首先要創(chuàng)建VO類,然后還要一個個屬性去填充,甚至說需要那種可能為空的屬性還得去判斷。是個不小的工作量。而萬一需要多加一個屬性,那么更改VO,重新去判斷賦值??偠灾β闊?。
下面是一個簡單的處理出參的辦法:
我們只要創(chuàng)建一個想要的出參的實體屬性數(shù)組,然后調(diào)用方法去置換就可以啦,下面是簡單的使用。
1. 獲取請求結(jié)果
這一步就沒啥好說的了,我們這里也只用list來舉例子。單個的對象也可以用這個方法,自己去變一下就行了。首先假裝我們獲取好了返回的數(shù)據(jù):
List<SOrderVO> list = sOrderService.getList();
2. 定義輸出屬性
然后我們簡單看下SOrderVO的屬性:

vo屬性
簡單來說這個VO中屬性好幾十個,一點不夸張。所以說我們這里如果全部返回的話,大部分字段是用不到的。所以這里我們可以自定義輸出什么屬性,這個用個字符串?dāng)?shù)組定義就可以了,需要注意的是數(shù)組中元素名稱要和屬性名稱一樣。如下:
String[] outPutParam = {"deliveryNo","poNo","mtSize","paTypeOrder","corType","ptnameSt","deliQuantity",
"deliveryTime","deliveryId","sOrderId","mtTypeName","orderQuantity","price"};
3. 調(diào)用已有方法去填充屬性
現(xiàn)在數(shù)據(jù)源有了,輸出格式有了,就差把已有的數(shù)據(jù)源按照格式來填充了,其實很簡單,就是兩個方法:
/**
* 生成輸出參數(shù)(輸出參數(shù)是LIst)
* @param object
* @param outPutParam
* @param <T>
* @return
*/
public static <T> List<ConcurrentHashMap<String, Object>> outPutToListMap(List<T> object, String[] outPutParam) {
List<ConcurrentHashMap<String, Object>> mapList = new ArrayList<>();
(object).forEach(o->{
mapList.add(outPutToMap(o, outPutParam));
});
return mapList;
}
/**
* 生成輸出參數(shù)
* @param object
* @param outPutParam
* @param <T>
* @return
*/
public static <T> ConcurrentHashMap<String, Object> outPutToMap(Object object, String[] outPutParam) {
ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
for (String str : outPutParam) {
PropertyDescriptor paramDescriptor = BeanUtils.getPropertyDescriptor(object.getClass(), str);
if(paramDescriptor!=null){
Method readMethod = Objects.requireNonNull(paramDescriptor).getReadMethod();
try {
Object invoke = readMethod.invoke(object);
map.put(str,invoke==null?"":invoke);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return map;
}
其實很簡單,就是調(diào)用反射,來獲取屬性并且填充到map,反正其實java中的對象在前端看來也不過是一個map。
4. 返回
最后也沒啥好說的,按照規(guī)定的格式返回就行了,沒啥好說的了。
本篇筆記就記到這里,如果稍微幫到你了記得點個喜歡點個關(guān)注,也祝大家工作順順利利,生活健健康康~!