我有一些JSON已經在秒時間戳(即Unix時間戳):如何反序列化傑克遜在幾秒鐘內的時間戳?
{"foo":"bar","timestamp":1386280997}
問傑克遜與時間戳結果的日期時間字段中1970-01-17T01:11:25.983Z
後不久,反序列化到這個對象,一時間因爲傑克遜假設它在毫秒。除了撕裂JSON並添加一些零之外,我如何讓傑克遜瞭解秒時間戳?
我有一些JSON已經在秒時間戳(即Unix時間戳):如何反序列化傑克遜在幾秒鐘內的時間戳?
{"foo":"bar","timestamp":1386280997}
問傑克遜與時間戳結果的日期時間字段中1970-01-17T01:11:25.983Z
後不久,反序列化到這個對象,一時間因爲傑克遜假設它在毫秒。除了撕裂JSON並添加一些零之外,我如何讓傑克遜瞭解秒時間戳?
我寫了一個自定義的deserializer以秒爲單位處理時間戳(Groovy語法)。
class UnixTimestampDeserializer extends JsonDeserializer<DateTime> {
Logger logger = LoggerFactory.getLogger(UnixTimestampDeserializer.class)
@Override
DateTime deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String timestamp = jp.getText().trim()
try {
return new DateTime(Long.valueOf(timestamp + '000'))
} catch (NumberFormatException e) {
logger.warn('Unable to deserialize timestamp: ' + timestamp, e)
return null
}
}
}
然後我註釋我的POGO使用,對於時間戳:
class TimestampThing {
@JsonDeserialize(using = UnixTimestampDeserializer.class)
DateTime timestamp
@JsonCreator
public TimestampThing(@JsonProperty('timestamp') DateTime timestamp) {
this.timestamp = timestamp
}
}
一個非常類似的方法@ DrewStephens的使用Java SE TimeUnit
A PI(在JDK1.5
介紹),而不是簡單的字符串連接,因此是(可以說)一點點更清潔,更表現:
public class UnixTimestampDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser parser, DeserializationContext context)
throws IOException, JsonProcessingException {
String unixTimestamp = parser.getText().trim();
return new Date(TimeUnit.SECONDS.toMillis(Long.valueOf(unixTimestamp)));
}
}
對受影響Date
場(S)指定您的自定義解串器(UnixTimestampDeserializer
):
@JsonDeserialize(using = UnixTimestampDeserializer.class)
private Date updatedAt;
有一個問題[這裏](http://stackoverflow.com/questions/5591967/jackson-date-deserialization),顯示如何實現自定義日期反序列化類 – Slicedpan
感謝您的提示 - 我回答了這個問題由於解串器有點不同,我如何解決這個問題的細節來自這個問題。 –