[英]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.