使用GSON序列化/反序列化简单对象-无时区指示符错误

时间:2019-02-14 05:06:53

标签: java json gson

我有一个接受请求并生成返回的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

3 个答案:

答案 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时间格式):

Java Date to UTC using gson