杰克逊:字段序列化格式取决于其他字段值

时间:2011-02-12 16:18:01

标签: java json jackson

我有以下Java类,我想使用Jackson将其序列化为JSON:

public class Event
   boolean allDay;
   Date start;
   Date end;

   // get/set
}

但是当allDay为真时,我希望将日期格式化为“yyyy-MM-dd”,当allDay为假时,我希望将日期格式化为“yyyy-MM-dd HH:mm”。这可能吗?

2 个答案:

答案 0 :(得分:1)

我认为没有任何内置方法可以做到这一点,这意味着您需要编写一些自定义序列化代码。 JsonDeserialize可能是你想要开始的地方。

您还必须确保使用JSON的代码知道如何处理两种替代格式 - 这是一个完全独立的混乱。实际上,发送未格式化的时间戳可能更有意义(我认为默认是将其写为自纪元以来的毫秒数)并确保客户端代码在显示给用户之前对其进行适当格式化。

答案 1 :(得分:1)

迈克的答案是正确的,当前的序列化器(可能还有解串器)是明显的方法。我想不出更具体的支持来处理像这样的共同约束案例。

对于反序列化,您还可以考虑将@JsonCreator用于构造函数(或静态工厂方法):好处是您可以定义要传递的布尔值和字符串值,因此自定义处理会更简单。 / p>