我正在使用谷歌GSON lib来使用客户端JSON API来处理序列化/反序列化。 事实证明这是有问题的,因为在API的json实体中,有许多日期格式分散在API中。
这方面的一些例子如下......
“2014年2月9日”
“15/10/1976”
“2014-02-09T07:32:41 + 00:00”
我无法控制客户开发的API,并且已被其他方消费。 似乎我可以设置GSON使用单一日期格式,但我不能让它解析每个字段的日期。
我原本希望GOSN为此提供注释,但我似乎无法找到一个。 有什么想法来设置这个吗?
答案 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设置器,这将使您可以明确控制设置每个字段。