我有一个接受请求并生成返回的JSON的API。 JSON是使用下面的对象和我的实用程序类生成的。
当JSON返回到应用程序时,我实际上使用完全相同的实用程序类将JSON序列化回对象。
但是,我得到一个例外(见下文)。我该如何解决?我已经尝试了几乎可以在网上找到的所有内容,但没有运气。
对象:
public class MyPerson() {
private String name;
private Date lastEdited;
}
用于转换的实用程序类:
public class GsonUtils {
private static final Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'hh:mm:ss")
.create();
public static String deserializeObjectToJSON(Object obj) {
return gson.toJson(obj);
}
public static <T> Object serializeObjectFromJSON(String json, Class<T> classType) {
return gson.fromJson(json, classType);
}
public static <T> List<T> serializeListOfObjectsFromJSON(String json, Type listType) {
return gson.fromJson(json, listType);
}
}
错误:
Caused by: java.text.ParseException: Failed to parse date ["2019-02-12T12:00:00.0"]: No time zone indicator at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.5.jar:na] at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.5.jar:na] ... 66 common frames omitted
编辑:
听取建议并更新实用程序类,同样的错误:
Caused by: java.text.ParseException: Failed to parse date ["2019-02-12T12:00:00.0"]: No time zone indicator
at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.5.jar:na]
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.5.jar:na]
... 66 common frames omitted
答案 0 :(得分:1)
yyyy-MM-dd'T'hh:mm:ss.S
将此作为您的日期格式
答案 1 :(得分:0)
从您的错误中可以明显看出,返回到应用程序的JSON也具有时区信息"2019-02-12T12:00:00.**0**
(最后的.0表示本地时区)
Caused by: java.text.ParseException: Failed to parse date ["2019-02-12T12:00:00.0"]: No time zone indicator at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) ~[gson-2.8.5.jar:na] at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ~[gson-2.8.5.jar:na] ... 66 common frames omitted
要对此进行序列化,必须在GsonBuilder中对其进行更新。
private static final Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'hh:mm:ss.S")
.create();
答案 2 :(得分:0)
找出问题所在
我将格式更改为-
private static final Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'")
.create();
此链接帮助我弄清楚了我的问题(我想要的是UTC时间格式):