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