[英]Serializing/Deserializing simple object using GSON - No time zone indicator error
我有一个接受请求并生成返回的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
yyyy-MM-dd'T'hh:mm:ss.S
将此作为您的日期格式
找出问题
我将格式更改为-
private static final Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'")
.create();
该链接帮助我弄清楚了我的问题(我想要的是UTC时间格式):
从您的错误中可以明显看出,返回到您的应用程序的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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.