Jackson Custom String to Date Serializer

时间:2016-03-12 10:19:38

标签: java json date serialization jackson

我正在尝试让Jackson以给定的格式解析String to Date。我现在想出了以下代码:

@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块内的断点处停止,就像从未调用它一样。其他(非自定义)字段填充正常。 我做错了什么?感谢

1 个答案:

答案 0 :(得分:1)

如果您尝试将JSON转换为EventData,其中一个字段是数据字符串,那么您需要对其进行反序列化(当您将Java对象转换为JSON /字节流时,序列化就是进程)。

杰克逊提供了更好的处理日期格式的方法:

http://wiki.fasterxml.com/JacksonFAQDateHandling

从Jackson 2.0开始,您可以使用JsonFormat,您可以在其中指定自定义日期格式

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