使用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客户端即可绕过问题:- 实现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; } };- 构建自定义Gson实例和序列化器,替换Graph客户端默认的序列化实现:
Gson customGson = new GsonBuilder() .setExclusionStrategies(idDuplicateExclusion) .create(); DefaultSerializer customSerializer = new DefaultSerializer(customGson); // 初始化Graph客户端时传入自定义序列化器 GraphServiceClient graphClient = GraphServiceClient.builder() .serializer(customSerializer) .authenticationProvider(authProvider) .buildClient();- 实现Gson字段排除策略,过滤掉重复的
兜底方案:直接调用原生HTTP接口
绕过SDK封装的搜索方法,自行使用HTTP客户端调用Graph搜索接口,手动解析返回的JSON数据,完全避开SDK内置类的解析冲突。
内容的提问来源于stack exchange,提问作者Renil Joy
相关产品推荐
相关产品推荐

