Java 使用GSON反序列化两种不同的日期格式

Java 使用GSON反序列化两种不同的日期格式,java,json,gson,Java,Json,Gson,我正在使用一个客户端JSON API,使用谷歌GSON库来处理序列化/反序列化。 这被证明是有问题的,因为在API的json实体中,有许多日期格式分散在API中 这方面的一些例子如下 “2014-02-09” “1976年10月15日” “2014-02-09T07:32:41+00:00” 我无法控制API,因为它是由客户开发的,并且已经被其他方使用。 似乎我可以将GSON设置为使用单一日期格式,但我无法让它在每个字段的基础上解析日期 我本以为GOSN会对此提供注释,但我似乎找不到注释。 有没

我正在使用一个客户端JSON API,使用谷歌GSON库来处理序列化/反序列化。 这被证明是有问题的,因为在API的json实体中,有许多日期格式分散在API中

这方面的一些例子如下

“2014-02-09”

“1976年10月15日”

“2014-02-09T07:32:41+00:00”

我无法控制API,因为它是由客户开发的,并且已经被其他方使用。 似乎我可以将GSON设置为使用单一日期格式,但我无法让它在每个字段的基础上解析日期

我本以为GOSN会对此提供注释,但我似乎找不到注释。
有没有关于如何设置的想法?

由于POJO中有多个
Date
字段,并且输入的JSON具有不同格式的日期,因此您需要为
Date
编写一个自定义反序列化程序来处理这些格式

class DateDeserializer implements JsonDeserializer<Date>
{
    @Override
    public Date deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException
    {
        String myDate = je.getAsString();
        // inspect string using regexes
        // convert string to Date        
        // return Date object
    }

}
当然,您也可以为POJO编写一个自定义反序列化程序,并自己从解析树填充所有内容

另一种选择是在POJO中将它们设置为
字符串
,然后让每个字段的getter将它们转换为
日期


除此之外,如果您没有完全使用Gson,那么jacksonjson解析器(默认情况下)在反序列化期间使用POJO的setter,这将为您提供对设置每个字段的显式控制

由于GSON的局限性,不太理想。谢谢您提供的信息。@carrot\u programmer\u 3当然,另一个选项是为具有多种日期格式的类编写自定义反序列化程序。虽然写这篇文章可能有点乏味,但它可以解决这个问题。请注意,JSON并没有定义标准的日期格式。日期可以是任何字符格式,也可以是从某个纪元日期算起的秒或毫秒,这完全取决于发送者。
Gson gson = new GsonBuilder()
                .registerTypeAdapter(Date.class, new DateDeserializer())
                .create();