net.sf.json.JSONObject對時間戳的格式化處理


1.問題

應用A向應用B發起HTTP請求獲取數據,數據中包含日期格式的屬性Time。應用B在返回數據給應用A之前對日期Time進行了格式化,轉換成了時間戳。假設Time格式化前為‘2020-11-08 00:22:35’,對應的時間戳為‘1468905’。發現應用A接收到數據后Time的值確實是‘1468905’,然而應用A在對數據進行格式化后發現Time卻不是‘2020-11-08 00:22:35‘,而是服務器當前時間!

2.排查

首先確定了日期轉換為時間戳沒有錯誤,問題出在了格式化工具上——net.sf.json.JSONObject。

通過Debug發現,應用A對接收到的數據進行格式化的時候,對於屬性Time接收到的類型是Long,而期望的類型是Date。實際類型與期望類型不符合,判斷為真:

if (!targetType.isInstance(value)) {
setProperty(bean, key, morphPropertyValue(key, value, type, targetType), jsonConfig);
}

在morphPropertyValue方法中意圖利用反射從Long類型的Class中找到date屬性,然后將時間戳賦給date......

//sourceBean:就是Long類型的時間戳
//name:意圖尋找到date屬性
PropertyDescriptor sourcePd = PropertyUtils.getPropertyDescriptor(sourceBean, name);

結果可想而知,它死活找不到。最后返回服務器當前時間......

3.解決

不去拷貝屎前代碼;

用FastJSON。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM