【问题标题】:json date format in spring-bootspring-boot中的json日期格式
【发布时间】:2014-12-17 00:34:01
【问题描述】:

我正在使用 spring-boot,并且我有一个定义了类似这样的实体类

import org.joda.time.LocalDateTime;
@Entity
public class Project {

    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")
    private LocalDateTime start_date;
...
...
}

当此类转换为 JSON 时,该字段将转换为以下字符串表示形式

{"start_date":[2014,11,15,0,0,0,0],...., ...}

我希望 json 响应为 yyyy-MM-dd。

我尝试了@DateTimeFormat(iso = ISO.DATE) 注释,但也没有用。

有没有一种简单的方法可以将这种转换为正确的 json 格式?

【问题讨论】:

  • objectMapper.registerModule(new JavaTimeModule());

标签: java spring-boot


【解决方案1】:

要将日期格式化为yyyy-MM-dd,您需要做三件事:

  1. 添加对com.fasterxml.jackson.datatype:jackson-datatype-joda 的依赖。从你目前得到的输出来看,我认为你可能已经有了这种依赖。
  2. 通过将 spring.jackson.serialization.write-dates-as-timestamps: false 添加到您的 application.properties 文件中,将 Jackson 配置为不将日期格式化为时间戳。
  3. 用@JsonFormat(pattern="yyyy-MM-dd") 注释LocalDataTime 字段或getter 方法

注意:您需要使用 Spring Boot 1.2 才能执行第 2 步。

【讨论】:

  • 谢谢。我必须升级到 spring 1.2,然后在 application.yaml 文件中添加该属性,它对我有用。不需要@JsonFormat 注释
  • 您必须在 application.yaml 中添加哪个属性来更改日期格式?
  • 第 3 步似乎是不必要的(这是默认格式)。如果您尝试任何其他格式,AND 实际上似乎无效。我仍在调查,但它似乎甚至没有查看 JsonFormat 注释
【解决方案2】:

没有额外的依赖 - 我唯一要做的就是:

  1. 注意从客户端发送日期作为字符串对象,格式为yyyy/MM/dd

  2. 在 Spring Boot 应用程序中,在日期字段上添加注释 相同的格式


public class Foo
{
     @JsonFormat(pattern = "yyyy/MM/dd")
     private Date dueDate;
}

使用 Spring Boot 2.3.5 版本


更新

另一个选项,而不是第 2 步,修改 application.properties 文件,添加任何 Date 对象的格式:

spring.jackson.date-format=yyyy/MM/dd

【讨论】:

    【解决方案3】:

    您可以在不使用任何依赖项的情况下使用 @JsonFormat 注释和所需的模式:

    @JsonFormat(pattern="yyyy-MM-dd")
    private Date created_At;
    

    【讨论】:

      【解决方案4】:

      我花了一些时间在 Spring Boot 应用程序 + 日期格式上为我的输入而苦苦挣扎,所以我将尝试恢复我所看到的内容。

      1. 如果您的日期是函数的参数,您可以使用@DateTimeFormat(pattern = "yyyy-MM-dd") 定义模式(即org.springframework.format.annotation.DateTimeFormat)。

      2. 如果您的日期在函数的对象参数中,您可以使用@JsonFormat(pattern = "yyyy-MM-dd") 定义模式(即com.fasterxml.jackson.annotation.JsonFormat)

      3. 如果这些都不起作用,您可以尝试更改您的日期类型,对我来说,我让您使用 org.joda.time.LocalDate 以使其与选项 2 一起使用:

          @JsonFormat(pattern = "dd/MM/yyyy")
          private org.joda.time.LocalDate date;
      

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 2015-05-18
        • 2015-05-15
        • 2015-05-20
        • 1970-01-01
        • 2017-04-19
        • 2012-02-20
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多