[英]GSON deserialized for type of Timestamp
我想通過在Java中使用gson反序列化時間戳。
// simple class what I want to serialize and deserialize
public class TestTime {
private Timestamp time;
}
// and I create gson and try to deserialize it
String body = request.getReader().lines().collect(Collectors.joining());
TestTime data = gson.fromJson(body, TestTime .class);
// my test data in response body
{"time": 1546476882}
但是,我得到了這個例外。
com.google.gson.JsonSyntaxException: 1546476882
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:107)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:82)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:35)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
如何長時間反序列化時間戳,例如1546476882?
正如@johnheroy所說,您需要一個TypeAdapter
在Timestamp
對象和long
值之間進行適配(顯然,自1970年1月1日,Unix時代以來已有幾秒鍾)。
這個適配器很簡單
public class TimestampAdapter extends TypeAdapter<Timestamp> {
@Override
public Timestamp read(JsonReader in) throws IOException {
return new Timestamp(in.nextLong() * 1000); // convert seconds to milliseconds
}
@Override
public void write(JsonWriter out, Timestamp timestamp) throws IOException {
out.value(timestamp.getTime() / 1000); // convert milliseconds to seconds
}
}
您需要這樣向Gson注冊此適配器:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Timestamp.class, new TimestampAdapter())
.create();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.