java - 默认情况下不支持 Java 8 日期/时间类型`java.time.Instant` 问题:
问题描述
我很难理解 java.time.Instant 库。我不确定哪里没有直接的解决方案来实现 Instant 库。我有一个 spring-boot 项目,我在 MongoDB 上使用 CRUD 操作创建了 RESTful 服务。一切都很好,直到我在 DTO 中引入了 Instant updatedOn 和 Instant createdOn。
这里是我的 POST 响应的示例代码,其中发生了故障。
@Override
public ResponseEntity<ResponseDto> create(@RequestBody CLMDto CLMDto) {
CLMDto createdCLMDto =
CLMService.create(CLMDto);
return ResponseEntity.status(HttpStatus.CREATED)
.header(
RESPONSE_HEADER_LOCATION, CLM_URL + "/" + createdCLMDto.getId())
.body(ResponseDto.builder().value(createdCLMDto).build()); //--------------------->**Failing here**
}
我的回复 DTO 看起来像这样
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class ResponseDto {
private Integer count;
private Object value;
private Object error;
private Object info;
}
和 CLMDto
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AdminDataDto {
private Instant createdOn;
private Instant updatedOn;
@JsonProperty(value = "updatedByName", access = JsonProperty.Access.READ_ONLY)
private String updatedByName;
}
在调试器中,我注意到发生异常的地方变量 createdCLMDto 具有以下值
createdOn:Instant@193 "2021-03-27T11:53:24.774765300Z"
updatedByName:test
updatedOn:Instant@195 "2021-03-27T11:53:24.774765300Z"
因为我正在使用 Lombok 插件,所以我无法在内部调试并找到自动生成代码的根本原因。我不是在寻找解决方案,而是在寻找可能出现问题的建议。我的确切错误是
Type definition error: [simple type, class java.time.Instant]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Java 8 date/time type `java.time.Instant` not supported by default: add Module \"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\" to enable
handling (through reference chain:
com.abc.service.dto.ResponseDto[\"value\"]->com.abc.dto.AdminDataDto[\"createdOn\"])",
不用说,但我已经尝试过这里提供的解决方案来更新 Maven 库,但没有成功。我在这个库周围的 StackOverflow 上发现了很多问题,但没有人解释实现这个库的最简单方法。
我已经在 pom.xml 中关注了依赖项
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
我已经尝试过这里提供的解决方案 Java 8 date time types serialized as object with Spring Boot
解决方案
您的项目中是否有以下工件?
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
根据spring 源代码,如果该类com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
存在于您的类路径中,JavaTimeModule
则应注册
推荐阅读
- android - 没有高级示例的 NavigationComponents 保留片段状态
- android - Android Calendar Provider 不返回最新数据
- r - R match.call:如何将变量传递给这个函数?
- mysql - SQL 数据库更正
- sql - 如何从主表中进行选择,但使用辅助链接表替换某些行?
- c - 获取指针指向的值
- amazon-s3 - 如何防止云端缓存 307 响应
- java - 如何在使用 OpenWebStart 的 webstart 应用程序中使用 Openjfx
- c - 如何在 C 中识别哪些条目是文件,哪些是目录
- python - 将箱线图和直方图组合成一个图