java對接口出參進行過濾

簡單說下這個用處:我們在實際代碼中經(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)注,也祝大家工作順順利利,生活健健康康~!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容