我收到错误:无法编写 JSON:Java 8 日期/时间类型
java.time.OffsetDateTime
默认情况下不支持:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310”以启用处理。但我已经添加了该模块,并根据互联网上的每个人的说法似乎正确配置了它,但它不起作用。
我已在以下位置注册时间模块:
@Configuration
public class JacksonConfiguration {
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = JsonMapper.builder()
.addModule(new JavaTimeModule())
.build();
return mapper;
}
}
我已经在我的 pom.xml 中导入了模块:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
我已经运行了 ObjectMapper.findModules();它找到了该模块。我还添加了一个断点来查看对象映射器是否已运行,并且确实运行了。但我仍然收到错误:无法编写 JSON:默认情况下不支持 Java 8 日期/时间类型
java.time.OffsetDateTime
:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310”以启用处理
此时:
PlannedMaintenance maintenance = new PlannedMaintenance();
maintenance.setEquipmentId(Long.parseLong(equipmentId));
maintenance.setPlannedStartTime(plannedStartTime);
maintenance.setPlannedEndTime(plannedEndTime);
maintenance.setCreated(OffsetDateTime.now());
boolean isInserted = plannedMaintenanceDAO.save(maintenance);
StompHeaders replyHeaders = new StompHeaders();
replyHeaders.add("status", isInserted ? "success" : "error");
replyHeaders.add("correlation-id", headers.get("correlation-id").get(0));
List<PlannedMaintenance> maintenanceReturn = plannedMaintenanceDAO.findAll();
stompService.sendMessage(headers.get("reply-to").get(0), maintenanceReturn, replyHeaders);
使用型号计划维护:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "PK")
private Long id;
@Column(name = "PLANNED_START_TIME", nullable = false)
private OffsetDateTime plannedStartTime;
@Column(name = "PLANNED_STOP_TIME", nullable = false)
private OffsetDateTime plannedEndTime;
@Column(name = "ACTUAL_END_TIME")
private OffsetDateTime actualEndTime;
@Column(name = "CREATED", nullable = false, updatable = false)
private OffsetDateTime created;
@Column(name = "UPDATED")
private OffsetDateTime updated;
@Column(name = "EQUIPMENT_ID", nullable = false)
private Long equipmentId;
我已经尝试了 4 个不同版本的 JacksonConfig,我尝试了该模块的不同版本,但没有任何效果,并且互联网上的任何其他人都没有给我一个有效的解决方案。 我正在使用 SpringBoot 3.1.10
你不需要覆盖整个bean。提供模块就足够了:
@Bean
public Module javaTimeModule() {
JavaTimeModule module = new JavaTimeModule();
return module;
}