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若想將巢狀物...