2014-07-23 35 views
3

我正在JSON负载中返回的日期格式不一致(这是另一个问题都在一起)的项目上工作。我正在研究的这个项目使用Jackson来解析JSON响应。现在我已经写了一些de/serializers来处理它,但它并不优雅。配置杰克逊解析多个日期格式

我想知道是否有一种方法来配置杰克逊的一组可能的日期格式来解析特定的响应,而不是写每个格式的几个单独的反序列化器。类似于how GSON handles the problem in this question

+1

在本GSON解决方案只有一个自定义解串器提到为什么不使用类似的方法:

import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; public class MultiDateDeserializer extends StdDeserializer<Date> { private static final long serialVersionUID = 1L; private static final String[] DATE_FORMATS = new String[] { "MMM dd, yyyy HH:mm:ss", "MMM dd, yyyy" }; public MultiDateDeserializer() { this(null); } public MultiDateDeserializer(Class<?> vc) { super(vc); } @Override public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { JsonNode node = jp.getCodec().readTree(jp); final String date = node.textValue(); for (String DATE_FORMAT : DATE_FORMATS) { try { return new SimpleDateFormat(DATE_FORMAT).parse(date); } catch (ParseException e) { } } throw new JsonParseException(jp, "Unparseable date: \"" + date + "\". Supported formats: " + Arrays.toString(DATE_FORMATS)); } } 

你可以简单地通过注释字段按如下方式使用呢? –

+1

http://wiki.fasterxml.com/JacksonFAQDateHandling –

回答

1

嗯,我正在过度这个..看起来像Syam S's建议适用于反序列化杰克逊的一组日期。

+0

你说GSON的东西也适用于杰克逊。你能证明它是如何完成的吗? – haroldcarr

6

同时,注释为一个更简单的解决方案面世:

public class DateStuff { 
    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:00", timezone="CET") 
    public Date creationTime; 
} 
+1

噢,真好!感谢您的高举。 –

3

这里是杰克逊多日期格式串行。

@JsonProperty("date") @JsonDeserialize(using = MultiDateDeserializer.class) final Date date,