You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot集成MongoDB存储LocalDateTime类型错误解码失败如何解决

问题解决步骤

1. 优先修复MongoDB驱动版本冲突

你的依赖中存在核心版本不兼容问题:org.mongodb:mongodb-driver-async:3.12.9属于3.x驱动系列,和你使用的4.x系列同步驱动、Spring Data MongoDB 3.2.x版本完全不兼容,这是导致LocalDateTime被序列化为嵌套文档(DOCUMENT类型)的核心原因。直接删除mongodb-driver-async依赖即可,Spring Data MongoDB 3.x版本已经不再支持3.x系列的异步驱动。

2. 实体类补充Mongo专属注解

你的实体类缺少Spring Data MongoDB的识别注解,且没有显式指定LocalDateTime字段的映射类型,修正后的实体类如下:

import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.mapping.FieldType;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.time.LocalDateTime;

@JsonInclude(JsonInclude.Include.NON_EMPTY)
@Document // 必须添加,让Spring Data MongoDB识别为Mongo文档实体
public class AnnotationSample {
    // 显式指定映射为BSON日期时间类型,避免序列化时被拆分为嵌套对象
    @Field(targetType = FieldType.DATE_TIME)
    private LocalDateTime startDate;

    // 必须补充对应getter、setter方法
    public LocalDateTime getStartDate() {
        return startDate;
    }

    public void setStartDate(LocalDateTime startDate) {
        this.startDate = startDate;
    }
}

3. 修正Mongo配置

你现有的自定义转换配置没有和MongoTemplate绑定,导致不生效,使用以下完整配置即可:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
import org.springframework.data.convert.Jsr310Converters;
import java.util.ArrayList;

@Configuration
public class MongoConfig {

    @Bean
    public MongoCustomConversions mongoCustomConversions() {
        return new MongoCustomConversions(new ArrayList<>(Jsr310Converters.getConvertersToRegister()));
    }

    @Bean
    public MongoTemplate mongoTemplate(MongoDatabaseFactory databaseFactory, MappingMongoConverter converter) {
        // 绑定自定义转换器
        converter.setCustomConversions(mongoCustomConversions());
        // 可选:移除自动写入的_class字段,不影响日期转换逻辑
        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
        converter.afterPropertiesSet();
        return new MongoTemplate(databaseFactory, converter);
    }
}

最后验证

修复配置后,需要先删除之前已经存入MongoDB的、类型为DOCUMENT的错误历史数据,新写入的LocalDateTime字段会自动被序列化为BSON DATE_TIME类型,查询时不会再出现类型不匹配报错。

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:51:00