2014-07-23 62 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,