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

MongoDB文档_id字段无法映射到POJO对应属性问题求助

问题原因

你出现解析失败的核心原因是注解和JSON解析库不匹配:
你在POJO类上使用的@JsonProperty是Jackson JSON库专属的注解,而你实际执行JSON解析时用的是Gson库,Gson无法识别Jackson的注解,因此_id、$oid的字段映射规则完全不生效,导致_id字段解析失败。

解决方案

方案1:替换为Gson专属注解(改动最小)

把POJO类中的@JsonProperty全部替换为Gson的@SerializedName注解即可:

改后MetadataCollection类

import com.google.gson.annotations.SerializedName;

public class MetadataCollection {
    @SerializedName("_id")
    private MetadataId id;

    private List<Metadata> metadata;

    public MetadataId getId() {
        return id;
    }

    public void setId(MetadataId id) {
        this.id = id;
    }

    public List<Metadata> getMetadata() {
        return metadata;
    }

    public void setMetadata(List<Metadata> metadata) {
        this.metadata = metadata;
    }
}

改后MetadataId类

import com.google.gson.annotations.SerializedName;

public class MetadataId {
    @SerializedName("$oid")
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

改完后原有Gson解析逻辑不用动,就能正常解析_id字段。

方案2:换用Jackson作为解析库

如果你希望继续使用Jackson的@JsonProperty注解,就把解析逻辑换成Jackson的ObjectMapper实现:

// 建议全局初始化一次ObjectMapper,不要每次方法调用重复创建
ObjectMapper objectMapper = new ObjectMapper();
// 解析替换原有Gson解析逻辑
MetadataCollection metadata = objectMapper.readValue(jsonString, MetadataCollection.class);

方案3(推荐):直接使用MongoDB驱动的POJO映射

不需要中间转JSON再解析的冗余步骤,MongoDB Java驱动原生支持POJO直接映射,性能更高也不会出现注解不匹配的问题:

  1. 配置MongoClient时添加POJO编解码器
  2. 直接获取对应POJO类型的MongoCollection,调用find方法直接返回映射好的对象即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 04:45:02