2016-03-12 37 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; 
    }