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

4

我正在从事一个非Spring Boot的项目。

有很多数据对象,手动为每个日期字段添加JsonFormat注释已经变得不太方便。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = JacksonSerialiser.DATE_FORMAT)
private Date someDate;

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

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
OBJECT_MAPPER.setDateFormat(simpleDateFormat);

只有在使用对象映射直接完成所有序列化/反序列化操作时,此方法才有效。

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

@JsonSerialize(using = CustomDateSerializer.class)
public Date someDate;

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

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

希望我可以不使用Spring来设置此属性,这将是很好的。

1
Spring能够为您完成这项魔术,因为它创建了一个ObjectMapper的bean,这可能是一个单例。因此,在非Spring项目中,您可以创建一个静态工厂方法或类似的东西,在需要进行序列化/反序列化以获取配置的对象映射器和自定义序列化程序的位置进行调用。 - Michał Krzywański
1个回答

0

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

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


那个人说他没有在做Spring Boot项目。我不想给你的建议点踩,但你应该回答符合那个人提问的情境。 - Steve Storck
请检查编辑和时间戳@SteveStorck。 - Joe W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接