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