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

Postman测试含Timestamp的gRPC请求:Time字段始终为空问题排查

问题:Postman测试gRPC接口时google.protobuf.Timestamp字段始终为null

服务端Proto3定义

syntax = "proto3";

option csharp_namespace = "NotificationServiceServer";

import "google/protobuf/timestamp.proto";
package log;
// The greeting service definition.
service Notification {
  // Sends a greeting
  rpc SaveLogToRabbit (LogRequest) returns (LogReply);
}

message LogRequest {
  string serviceName = 1;
  string serviceMessage = 2;
  google.protobuf.Timestamp time = 3;
}

// The response message containing the greetings.
message LogReply {
  bool isSuccess = 1;
}

我用Postman测试上述gRPC服务的SaveLogToRabbit接口时,serviceName和serviceMessage能正常获取值,但time字段始终为空(请求中该属性为null),先后尝试了三种格式:

  • 时间戳字符串格式:
{
    "serviceMessage": "tempor reprehenderit cupidatat nulla",
    "serviceName": "nisi ad sit",
    "time": "1696961114907"
}
  • ISO8601格式:2023-10-10T12:00:00.000Z
  • 包含seconds和nanos的结构体格式:
{
  "serviceName": "service",
  "serviceMessage": "message",
  "time": {
    "seconds": 1633824000,
    "nanos": 0
  }
}

解决方案

1. 严格遵循Protobuf JSON映射规范

google.protobuf.Timestamp在JSON中的官方映射格式是RFC 3339标准的时间字符串,正确的请求示例:

{
  "serviceName": "service",
  "serviceMessage": "message",
  "time": "2023-10-10T12:00:00Z"
}

注意必须带末尾的Z(表示UTC时区),毫秒部分可选(如2023-10-10T12:00:00.123Z)。数字时间戳和结构体格式都不符合Protobuf JSON的官方映射规则,无法被正确解析。

2. 确认Postman请求的格式类型

在Postman中创建gRPC请求时,要确保选择的是gRPC/JSON模式(而非纯二进制gRPC)。如果是二进制模式,需要用Protobuf二进制格式序列化请求,JSON格式会直接无效。

3. 检查服务端的Protobuf JSON转码配置

由于你的服务端是C#(从proto的csharp_namespace可知),需确保ASP.NET Core项目中正确启用了gRPC的JSON转码支持:

// Program.cs 中的配置
var builder = WebApplication.CreateBuilder(args);

// 添加gRPC服务并启用JSON转码
builder.Services.AddGrpc().AddJsonTranscoding();

var app = builder.Build();

// 映射gRPC服务
app.MapGrpcService<NotificationService>();
app.Run();

如果没有启用AddJsonTranscoding(),服务端无法正确解析JSON格式的gRPC请求,会导致time字段无法反序列化。

4. 验证时间字符串的合法性

避免使用不符合RFC 3339的格式,比如:

  • 错误:"2023-10-10 12:00:00"(缺少T分隔符)
  • 错误:"2023-10-10T12:00:00"(缺少Z时区标识)
  • 错误:"2023/10/10T12:00:00Z"(用斜杠代替横杠)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:44:54