无法编写JSON:SpringBoot默认不支持Java 8日期/时间类型`java.time.OffsetDateTime`

问题描述 投票:0回答:1

我收到错误:无法编写 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

java spring-boot datetime
1个回答
0
投票

你不需要覆盖整个bean。提供模块就足够了:

    @Bean
    public Module javaTimeModule() {
        JavaTimeModule module = new JavaTimeModule();
        return module;
    }
© www.soinside.com 2019 - 2024. All rights reserved.