2016-03-12 59 views
0

我想讓傑克遜以給定的格式解析字符串日期。我現在想出了以下代碼:傑克遜自定義字符串日期序列化器

@JsonIgnoreProperties(ignoreUnknown = true) 
public class EventData implements Serializable { 

    private transient SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 

    @JsonSerialize(using = StringToDateSerializer.class, as = Date.class) 
    private Date eventStart; 

    public class StringToDateSerializer extends JsonSerializer<String> { 

     @Override 
     public void serialize(String tmpString, 
           JsonGenerator jsonGenerator, 
           SerializerProvider serializerProvider) 
       throws IOException, JsonProcessingException { 
      try {     
       jsonGenerator.writeObject(formatter.parse(tmpString)); 
      } catch (ParseException e) { 

      } 
     } 
    } 
} 

但是我唯一的字段eventStart總是被填充爲NULL。另外,它不會在try/catch塊內的斷點處停止,就好像它從未被調用過一樣。其他(非自定義)字段填充正常。 我做錯了什麼?謝謝

+0

你能否介紹您如何使用更詳細這個EventData? – Raghavan

回答

1

如果您試圖將JSON轉換爲EventData,其中一個字段是數據字符串,那麼您需要反序列化它(序列化是將Java對象轉換爲JSON /字節流時的過程)。

傑克遜提供更好的方法如何處理日期格式:

http://wiki.fasterxml.com/JacksonFAQDateHandling 

由於傑克遜2.0可以使用JsonFormat在那裏你可以指定自定義日期格式

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