繁体   English   中英

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

[英]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时间格式):

使用gson将Java Date转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM