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

NestJS调用GRPC接口时响应中空列表字段无法显示问题

问题根因

不属于配置遗漏,是Protobuf3默认序列化规则与NestJS gRPC模块默认加载配置共同作用的结果:

  • Protobuf3 规范中,repeated类型字段的默认值为空数组[],默认序列化逻辑会直接省略所有值为默认值的字段,不会出现在最终输出的JSON结构中。
  • 通过blrromRPC调用时能看到空的flags字段,是因为该工具默认开启了「展示默认值字段」的开关,而NestJS依赖的@grpc/proto-loader默认关闭该开关,因此空数组字段会被直接过滤。
  • 该过滤仅发生在对象转JSON的展示层,原始响应的字段定义实际存在,不存在数据丢失问题。
解决方法

调整gRPC模块的proto loader配置即可:在注册gRPC服务/客户端的配置块中,给loader字段追加两个参数,原有配置全部保留:

// 对应GrpcModule注册的代码位置,通常在app.module.ts
GrpcModule.forRoot({
  // 原有配置项保持不变,比如protoPath、package、服务地址、鉴权配置等
  loader: {
    // 原有loader配置保持不变,比如keepCase、longs类型处理配置等
    defaults: true, // 强制输出所有取值为默认值的字段
    arrays: true, // 强制输出空数组字段,即使值为默认空
  }
})

配置修改完成后重启服务,再次调用接口即可看到完整的flags空数组字段。

如果调整loader配置后仍未生效,检查代码中是否存在手动对gRPC响应做toObject或JSON序列化的逻辑,序列化时需要同步传入对应参数:

// 手动序列化gRPC响应对象的场景
const formattedResp = rawResp.toObject({
  defaults: true,
  arrays: true
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:24:34