如何格式化 POJO 中的 LocalDateTime 字段持久化到 BLOB

Posted

技术标签:

【中文标题】如何格式化 POJO 中的 LocalDateTime 字段持久化到 BLOB【英文标题】:How to format a LocalDateTime field in a POJO persisted to a BLOB 【发布时间】:2020-11-29 07:35:16 【问题描述】:

我有一个 POJO,我以 JSON 格式存储在 mysql 数据库表的 BLOB 列中。有问题的 POJO 有一个 LocalDateTime 字段,每当我将数据保存到列时,LocalDateTime 字段采用this question 中描述的格式,而我希望它以 yyyy-MM-dd hh 格式表示:毫米:ss

我已尝试实施链接帖子中建议的解决方案,但都没有奏效。我的猜测是,这与该字段是 BLOB 中 POJO 的一部分这一事实有关,而不是传统的 Timestamp 字段。

这是我的 POJO 的代码

public class MyPOJO 

    private Long id;

    @JsonFormat(pattern="yyyy-MM-dd")
    @DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
    private LocalDateTime dateTime;

    private String someText;

    //Constructors

    //Getters and setters


欢迎提出任何意见。

这是当前的 JSON 输出:


"id" : 1,
"dateTime" : 
    "year" : 2010,
    "month" : "JANUARY",
    "dayOfMonth" : 1,
    "dayOfWeek" : "FRIDAY",
    "dayOfYear" : 1,
    "monthValue" : 1,
    "hour" : 2,
    "minute" : 2,
    "second" : 0,
    "nano" : 0,
    "chronology" : 
      "id" : "ISO",
      "calendarType" : "iso8601"
    
  , 
  "someText": "someText"

【问题讨论】:

只需在字段上使用@JsonFormat(pattern="yyyy-MM-dd") 即可,它应该可以工作。确保您发送准确的 MyPOJO 对象作为响应 【参考方案1】:

您的案例的正确注释应该是:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss")
    private LocalDateTime dateTime;

可以在此处找到描述此解决方案的完整问题:Spring Data JPA - ZonedDateTime format for json serialization。而且,你为什么要把你的 POJO 持久化到 BLOB 中呢?至少,使用 CLOB(BLOB 代表 Binary Large OBject,CLOB 代表 C角色Large OBject)。但实际上,您可能应该考虑 VARCHAR2 字段在大多数情况下应该足够了。

【讨论】:

【参考方案2】:

我认为您应该使用@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss"),因为您还需要这些时间价值。如果没有替换为 LocalDate 并保留您当前的正则表达式格式。

【讨论】:

以上是关于如何格式化 POJO 中的 LocalDateTime 字段持久化到 BLOB的主要内容,如果未能解决你的问题,请参考以下文章

为改造创建 pojo 类和回调

如何更改杰克逊以检测 POJO 中的所有字段,而不仅仅是公共字段?

jOOQ 和自动生成,如何避免表 POJO 中的 UDT 记录

如何仅查询 Hibernate 中的有限列,并将它们映射到给定的 POJO?

如果 POJO 扩展了 Spring Jackson 中的抽象类,如何忽略它的大小写?

使用 JSend 格式通过 Retrofit 将 JSON 响应转换为 POJO?