【问题标题】:Date format in the json output using spring boot使用spring boot的json输出中的日期格式
【发布时间】: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”格式显示日期。

【问题讨论】:

    标签: java rest spring-boot spring-hateoas


    【解决方案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()) 似乎已弃用
    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2019-01-19
    • 2015-05-20
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2017-04-19
    相关资源
    最近更新 更多