Jackson:字段序列化格式取决于其他字段值

问题描述 投票:0回答:2

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

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

   // get/set
}

但我想当 allDay 为 true 时将日期格式设置为“yyyy-MM-dd”,当 allDay 为 false 时将日期格式设置为“yyyy-MM-dd HH:mm”。 这可能吗?

java json jackson
2个回答
2
投票

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

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


1
投票

迈克的回答是正确的,当前的串行器(可能还有解串器)是显而易见的方法。我想不出更具体的支持来处理像这样的共同约束情况。

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

© www.soinside.com 2019 - 2024. All rights reserved.