You need to enable JavaScript to run this app. 使用Graph Java SDK搜索DriveItem报SearchHit存在多个_id字段如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Graph Java SDK搜索DriveItem报SearchHit存在多个_id字段如何解决

问题解决方案:Graph Java SDK搜索DriveItem时SearchHit重复JSON字段报错

根因说明

该报错由Microsoft Graph Beta版Java SDK的内置类缺陷导致:com.microsoft.graph.models.SearchHit类及其父类同时声明了映射为JSON字段_id的属性,Gson反序列化时检测到重复字段声明触发冲突。

可行解决方案

  • 优先升级SDK版本
    该问题属于Beta版SDK的已知缺陷,微软已在后续版本中完成修复。将graph-beta依赖升级到最新正式发布版,同时保持Gson依赖版本与SDK要求的版本匹配,即可直接解决冲突。

  • 自定义Gson序列化排除策略(适配无法升级SDK的场景)
    无需修改SDK内置类,通过自定义序列化器注入到Graph客户端即可绕过问题:

    1. 实现Gson字段排除策略,过滤掉重复的_id字段:
    ExclusionStrategy idDuplicateExclusion = new ExclusionStrategy() {
        @Override
        public boolean shouldSkipField(FieldAttributes f) {
            return f.getDeclaringClass() == SearchHit.class && f.getName().equals("_id");
            // 若重复字段在父类,可调整判断逻辑为父类类型
        }
        @Override
        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }
    };
    
    1. 构建自定义Gson实例和序列化器,替换Graph客户端默认的序列化实现:
    Gson customGson = new GsonBuilder()
        .setExclusionStrategies(idDuplicateExclusion)
        .create();
    DefaultSerializer customSerializer = new DefaultSerializer(customGson);
    // 初始化Graph客户端时传入自定义序列化器
    GraphServiceClient graphClient = GraphServiceClient.builder()
        .serializer(customSerializer)
        .authenticationProvider(authProvider)
        .buildClient();
    
  • 兜底方案:直接调用原生HTTP接口
    绕过SDK封装的搜索方法,自行使用HTTP客户端调用Graph搜索接口,手动解析返回的JSON数据,完全避开SDK内置类的解析冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:24:04