如何格式化 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 中的所有字段,而不仅仅是公共字段?
jOOQ 和自动生成,如何避免表 POJO 中的 UDT 记录
如何仅查询 Hibernate 中的有限列,并将它们映射到给定的 POJO?