当Gson解析包含Date(时间精确到毫秒级)时,直接转换是由问题的,即类型转换会失败,所以会报错。
需要自定义gson,实现转换。如下,即可解决。(Stack Overflow是利器啊!!!)
// Creates the json object which will manage the information received
GsonBuilder builder = new GsonBuilder();
// Register an adapter to manage the date types as long values
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
});
Gson gson = builder.create();
追加一个示例:
1.Request实体
public class Request {
private String name;
private Integer age;
private Date birthday;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Request{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
}
2.GsonToDateTest,测试类
public class GsonToDateTest {
public static void main(String[] args) {
//对象转string
Request request = new Request();
request.setName("Tom");
request.setAge(18);
request.setBirthday(new Date());
String string = new Gson().toJson(request);
System.out.println(string);
System.out.println();
System.out.println(System.currentTimeMillis());
String string1 = "{\"name\":\"Tom\",\"age\":18,\"birthday\":\"1574329563042\"}";
//string转对象
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
});
Gson gson = builder.create();
Request request1 = gson.fromJson(string1,Request.class);
System.out.println(request1);
}
}
string转Java实体时,Date为毫秒级的时间戳。运行结果如下:
{"name":"Tom","age":18,"birthday":"Nov 21, 2019 5:54:01 PM"}
Request{name='Tom', age=18, birthday=Thu Nov 21 17:46:03 CST 2019}