Jackson 为所有日期字段设置全局日期格式

Bor*_*lov 5 java serialization json date jackson

我正在从事非春季启动项目。

有大量的数据对象,使用 JsonFormat 注释所有日期字段开始变得不方便。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = JacksonSerialiser.DATE_FORMAT)
private Date someDate;
Run Code Online (Sandbox Code Playgroud)

我知道我可以直接在 ObjectMapper 上设置日期格式

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
OBJECT_MAPPER.setDateFormat(simpleDateFormat);
Run Code Online (Sandbox Code Playgroud)

如果所有序列化/反序列化都是直接使用对象映射器完成的,则此方法有效。

您可以通过扩展来实现 CustomDateSerializer StdSerializer<Date>,但为了应用格式,您需要在字段级别指定它,如下所示:

@JsonSerialize(using = CustomDateSerializer.class)
public Date someDate;
Run Code Online (Sandbox Code Playgroud)

对于 Spring Boot,您可以使用以下属性:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

如果我可以在没有弹簧的情况下设置这样的属性,那就太好了。

Joe*_*e W 0

一种选择是实现您自己的Jackson2ObjectMapperBuilderCustomizer并将其公开为 bean。然后,您可以使用自定义序列化器和反序列化器将日期转换自定义设置放在那里。然后,默认对象映射器将进行您的自定义,下游的所有内容都将自动继承它。

相关示例 如何在Spring Boot 1.4中自定义Jackson