【发布时间】:2019-11-26 01:19:29
【问题描述】:
我对 JPA 实体类的 LocalDateTime 的序列化有疑问。 我有一个“挑战”类,其中包含两个日期“开始日期”和“结束日期”。
...
@Column(name = "begindate")
private LocalDateTime begindate;
@Column(name = "enddate")
private LocalDateTime enddate;
...
我已经指定了 JPA 可以将 LocalDateTime 转换为时间戳的 LocalDateTimeAttributeConverter。
我使用 Jersey 编写了一个 Web 应用程序,它从数据库中请求我的挑战实体。
当我测试一个实体的GET 请求时,我希望日期显示为"begindate": "2019-09-01T00:00:00+02:00",但我的应用程序以这种格式提供属性:
"begindate": {
"date": {
"dayOfWeek": "MONDAY",
"month": "JULY",
"year": 2019,
"dayOfMonth": 1,
"dayOfYear": 182,
"era": "CE",
"monthValue": 7,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
},
"leapYear": false,
"day": 1
},
"dayOfWeek": "MONDAY",
"hour": 12,
"month": "JULY",
"dayOfMonth": 1,
"dayOfYear": 182,
"year": 2019,
"monthValue": 7,
"nano": 0,
"time": {
"hour": 12,
"nano": 0,
"minute": 0,
"second": 0
},
"minute": 0,
"second": 0
}
当我使用 GlassFish Server 时,输出与我预期的一样。 现在我使用的是 TomEE 7,因为 GlassFish Server 遇到了一些问题,这里的 LocalDateTime 被序列化为 JSON。 是否有可能以上述简单格式获得输出?
感谢您的帮助!
【问题讨论】:
-
您的 JSON 序列化库似乎配置错误。如果您使用的是 Jackson,您是否在
ObjectMapper中注册了JavaTimeModule? -
我应该在我的应用程序的哪里注册模块?
-
无论在哪里创建
ObjectMapper。同样,我猜测您正在使用的技术堆栈。如果是 JEE 和 JAX-RS,我会先尝试创建 a provider forObjectMapper。你只需要objectMapper.addModule(new JavaTimeModule())行,你还需要com.fasterxml.jackson.datatype:jackson-datatype-jsr310在你的JavaTimeModule的类路径中
标签: java json rest jpa serialization