關於fastjson使用總結

2021-09-05 10:14:25 字數 2770 閱讀 4416

1、背景

專案需要從其他廠商中將資料轉接過來,存到自己的資料庫中,根據三方廠商提供的api介面文件來對接。

2、實現

對於這種資料轉接的問題,就像usb轉接頭一樣,兩端的東西肯定是有差異,所以才需要中間這個協議來處理,自然對於資料庫的表結構,就需要加對映表來儲存兩者之間的關係,各種字段雖然不同,但是業務內容差不多。

這裡想說的其實主要是關於資料獲取的過程,就是使用阿里巴巴的fastjson工具來實現資料解析獲取。

當然在這之前對於http連線請求,也可以記錄一下,從網上找的方法,感覺很好用:

/*** 向指定url傳送get方法的請求

* * @param url

*            傳送請求的url

* @param param

*            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。

* @return url 所代表遠端資源的響應結果

*/public static string sendget(string url, string param)

// 定義 bufferedreader輸入流來讀取url的響應

in = new bufferedreader(new inputstreamreader(connection.getinputstream()));

string line;

while ((line = in.readline()) != null)

} catch (exception e)

// 使用finally塊來關閉輸入流

finally

} catch (exception e2)

}return result;

}/**

* 向指定 url 傳送post方法的請求

* * @param url

*            傳送請求的 url

* @param param

*            請求引數,請求引數應該是 name1=value1&name2=value2 的形式。

* @return 所代表遠端資源的響應結果

*/public static string sendpost(string url, string param)

} catch (exception e)

//使用finally塊來關閉輸出流、輸入流

finally

if(in!=null)

}catch(ioexception ex)

}return result;

}    

下面進入正題,記錄下fastjson的使用。

首先看看別人家**注釋版權資訊, 1999到2101, 馬老師要將阿里做成一家跨越三個世紀的公司的理念,深入**。

根據api文件,提供的資料格式如下:

"code": 0,

"msg": "操作成功",

從使用來看,還是很方便處理這種資料的,json字串中可能包含具體的值,也可能繼續巢狀json物件,也有可能包含陣列資料,呼叫其提供的方法,可以層層剖析,抽絲剝繭,就像剝洋蔥一樣,得到每乙個層次想要的東東。

3、遇到的問題

3.1 token過期和使用次數限制問題。 剛開始的時候每個介面中都會直接呼叫api獲取新的token, 但是發現呼叫次數太多,導致獲取不到,於是將這個token值快取起來,每次只有真正執行任務的時候去呼叫一次。

//記錄token,正常過期時間為 7200 s

3.2 資料重複問題

因為裝置廠商的裝置返回資料有時候會有重複資料,每次返回的資料中會帶有時間戳資訊,因此可以根據時間戳資訊來判斷

是否重複,當然還需要關聯好裝置序列號資訊,因為裝置sn在獲取到之後,是不會變化的,所以想到了將其作為key,然後將時間戳資訊作為value來放到乙個hashmap中儲存,用來進行資料去重:

//用來去重同一臺裝置返回的同乙個時間點的資料,將裝置碼sn作為key, 時刻值time作為value

另外乙個要提的問題就是arraylist 在遍歷時如果進行remove操作,會報concurrentmodificationexception異常,所以需要改用其他工具來處理,當然我比較偷懶,又新建了乙個arraylist,專門來儲存remove後的結果:

4、任務執行

由於這個資料轉接是實時資料獲取,因此在部署後,後台需要不停地獲取資料來轉存,於是使用spring框架中的定時任務:

// 設定時間間隔,每天8點到 18 點,每隔兩分鐘獲取一次資料

//@scheduled(cron = "0 0/2 8-18 * * ?")

在配置中的引用:

阿里的fastjson使用總結

查詢的datetime日期格式資料,需要使用阿里的fastjson註解,轉為字串展示 jsonfield format yyyy mm dd hh mm ss fastjson包使用註解 private date createtime 微服務中 消費方呼叫rpc介面提供方 json資料的流 一般在s...

fastjson簡單使用

fastjson 是阿里巴巴的開源專案 主要是操作json 與 自定義物件,map,list之間進行的轉換 以下給出了 6種轉換 都是我自己封裝的 一點渣水平,封裝的 方法可以直接拿去用 我都已經測試過的 1.json 轉換 自定義物件 string json user user json.pars...

fastjson 使用技巧

當你有乙個欄位是字串型別,裡面是json格式資料,你希望直接輸入,而不是經過轉義之後再輸出,這時使用jsondirect true引數,如 import com.alibaba.fastjson.annotation.jsonfield public static class model若想將巢狀物...