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

时间:2014-02-09 18:30:09

标签: java json gson

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

这方面的一些例子如下......

“2014年2月9日”

“15/10/1976”

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

我无法控制客户开发的API,并且已被其他方消费。 似乎我可以设置GSON使用单一日期格式,但我不能让它解析每个字段的日期。

我原本希望GOSN为此提供注释,但我似乎无法找到一个。 有什么想法来设置这个吗?

1 个答案:

答案 0 :(得分:6)

由于您的POJO中有多个Date字段,并且包含JSON的日期具有不同格式的日期,因此您需要为Date编写可以处理这些格式的自定义反序列化程序。 / p>

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
    }

}

您可以在创建Gson实例时将其注册为类型适配器:

Gson gson = new GsonBuilder()
                .registerTypeAdapter(Date.class, new DateDeserializer())
                .create(); 

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

另一种选择是在POJO中将它们设置为String,然后将每个字段的getter转换为Date

除此之外,如果您还没有完全依赖于使用Gson,那么Jackson JSON解析器(默认情况下)会在反序列化期间使用您的POJO设置器,这将使您可以明确控制设置每个字段。