2016-09-24 130 views
0

我正在與第三方WS進行集成,這些WS以不同標準發送日期。 例如郵件正文:傑克遜JSON翻譯

{ 
    "date" : "2016-09-12T16:00:00+0000" 
} 

通過採用以下配置傑克遜能夠很好地反序列化到POJO:

public class Pojo { 
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssZ") 
    ZonedDateTime date; 

    public ZonedDateTime getDate() { 
     return date; 
    } 

    public void setDate(ZonedDateTime date) { 
     this.date = date; 
    } 
} 

我的問題是,我想從一個圖形序列化date,然後將其序列化爲一個由我們的系統使用。我明白我可以分解代碼中的映射和反序列化,但也許有更清晰的方法?

+0

我很驚訝,它甚至可以編譯,因爲它應該是'@JsonFormat( pattern =「yyyy-MM-dd'T'HH:mm:ssZ」)'用雙引號 –

+0

@NicolasFilotto它在GROOVY – Xeperis

+0

我想你應該在某處提及它 –

回答

1

您可以具體使用@JsonDeserialize@JsonSerialize並提供自定義串行器/解串器,它可以擴展StdSerializer/StdDeserializerserializedeserialize方法必須被覆蓋。舉個例子:

// Field 
@JsonSerialize(using = CustomDateSerializer) 
@JsonDeserialize(using = CustomDateDeserializer) 
ZonedDateTime date 

而且CustomDateSerializer

class CustomDateSerializer extends StdSerializer<ZonedDateTime> { 

    private static DateTimeFormatter formatter = 
     DateTimeFormatter.ofPattern("dd-MM-yyyy hh:mm:ss") 

    public CustomDateSerializer(Class<ZonedDateTime> t) { 
     super(t) 
    } 

    @Override 
    public void serialize(Date value, JsonGenerator gen, SerializerProvider arg2) 
     throws IOException, JsonProcessingException { 
     gen.writeString(formatter.format(value)) 
    } 
} 

同樣,對於deserialization

class CustomDateDeserializer extends StdDeserializer<ZonedDateTime> { 
  
    private static DateTimeFormatter formatter = 
      DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ") 
  
    public CustomDateDeserializer(Class<?> vc) { 
        super(vc) 
    } 
  
    @Override 
    public Date deserialize(JsonParser jsonparser, DeserializationContext context) 
      throws IOException, JsonProcessingException { 
        String date = jsonparser.getText() 
        try { 
            return ZonedDateTime.parse(formatter, date) 
        } catch (DateTimeParseException e) { 
            throw new RuntimeException(e) 
        } 
    } 
}