使用spring boot的json输出中的日期格式
Posted
技术标签:
【中文标题】使用spring boot的json输出中的日期格式【英文标题】:Date format in the json output using spring boot 【发布时间】:2015-05-15 15:42:10 【问题描述】:我正在使用 Spring Boot 来创建 REST 应用程序。我有一个如下所示的 DTO:
public class Subject
private String uid;
private String number;
private String initials;
private Date dateOfBirth;
我使用 Spring-Hateos,我的控制器的 reurn 类型是 ResponseEntity<Resources<Resource<Subject>>>
。我需要以“yyyy-mm-dd”格式显示日期。
【问题讨论】:
【参考方案1】:如果您的应用程序使用 Jackson 整数将 bean 序列化为 JSON 格式,则可以使用 Jackson 注释 @JsonFormat 将日期格式化为指定格式。
在您的情况下,如果您需要将日期转换为 yyyy-MM-dd
格式,则需要在要应用此格式的字段上方指定 @JsonFormat
。
例如:
public class Subject
private String uid;
private String number;
private String initials;
@JsonFormat(pattern="yyyy-MM-dd")
private Date dateOfBirth;
//Other Code
来自文档:
注释用于配置属性值的详细信息 将被序列化。
More Reference Doc
希望这会有所帮助。
【讨论】:
嗨,我在这里遇到了一个问题。 json格式显示的日期少了1天。 请发布您存储的值以及如何存储?从数据库或其他东西 我正在从 XMLGregorianCalendar 格式的肥皂服务中检索日期。我已将其转换为 java.util.Date,并将其转换为 json 格式。例如:将 XMLGregorianCalendar 对象转换为 Date 后,在控制台中显示 2014-02-11。但在 json 输出中显示的是 2014-02-10。 subject.setNumber(subjectContainer.getNumber()); subject.setInitials(subjectContainer.getInitials()); if(subjectContainer.getDateOfBirth() != null) subject.setDateOfBirth(subjectContainer.getDateOfBirth().toGregorianCalendar().getTime()); subjectContainer类型对象DateOfBirth
字段的数据类型是什么?【参考方案2】:
您很可能的意思是“yyyy-MM-dd”,后面的小“m”表示分钟部分。
你应该做两件事
在您的 application.properties
中添加 spring.jackson.serialization.write-dates-as-timestamps:false
,这将禁用将日期转换为时间戳,而是使用符合 ISO-8601 的格式
您可以通过使用@JsonFormat(pattern="yyyy-MM-dd")
注释dateOfBirth
属性的getter 方法来自定义格式
【讨论】:
嗨,我在这里遇到了一个问题。 json格式显示的日期少了1天。 使用 Spring Boot 1.3.0 测试,您似乎不需要spring.jackson.serialization.write-dates-as-timestamps
,但只使用 @JsonFormat
注释就足够了
有没有办法对所有日期执行此操作,而不必一一注释?
@Pramod 你找到日期显示少1天的解决方案了吗
它为我显示了正确的日期(springboot v.2.0.3)【参考方案3】:
从 Spring Boot 版本 1.2.0.RELEASE 开始,您可以将一个属性添加到您的 application.properties
以将默认日期格式设置为您的所有类 spring.jackson.date-format
。
对于您的日期格式示例,您可以将此行添加到属性文件中:
spring.jackson.date-format=yyyy-MM-dd
参考https://docs.spring.io/spring-boot/docs/1.2.0.RELEASE/reference/html/common-application-properties.html
【讨论】:
如果它是一个属性,我相信它应该在某个地方导入。问题是在哪里。经过测试 - 如果只是添加到 application.properties 或 application.yml 则不起作用【参考方案4】:如果您想更改所有日期的格式,您可以添加构建器定制器。下面是一个将日期转换为 ISO 8601 的 bean 示例:
@Bean
public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer()
return new Jackson2ObjectMapperBuilderCustomizer()
@Override
public void customize(Jackson2ObjectMapperBuilder builder)
builder.dateFormat(new ISO8601DateFormat());
;
【讨论】:
效果很好!您应该将此添加到您的 AppConfig/@Configuration 类 这还能用吗?新的 ISO8601DateFormat()) 似乎已弃用以上是关于使用spring boot的json输出中的日期格式的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot:JSON将带有时区的日期和时间反序列化为LocalDateTime