当前位置: 首页 > 知识库问答 >
问题:

gRPC方法可以返回一个字段可以是字符串或null的消息吗?

宇文俊风
2023-03-14

我正在设计一个用Go编写的gRPC服务。

gRPC服务前面是特使,它将传入的HTTP请求转换为gRPC,并将gRPC响应转换为JSON。

此应用程序的要求是有一个返回以下JSON对象的endpoint:

{
    my_id: "AAA"
}

我可以在Go中非常简单地建模这个响应,如下所示:

// A MyResponse object.
message MyResponse {
  // contents is a list of contents.
  string my_id = 1;
}

但我的要求是,有时我的_id可能是空的。在这种情况下,我想找回以下JSON:

{
    my_id: null
}

信息技术

是否可以修改MyResponse,使my_id可以是返回的JSON对象中的字符串或空值?如果是,怎么做?如果不是,这不是gRPC设计中的一个很大的差距吗?

共有1个答案

庄浩言
2023-03-14

我建议您使用软件包google的StringValue字段。protobuf

字符串的StringValue包装消息。

StringValue的JSON表示是JSON字符串。

因此,在proto文件中,您应该导入:

import "google/protobuf/wrappers.proto";

然后举例说明:

  google.protobuf.StringValue name = 2;

要处理这些值,可以查看包装器。StringValuegithub的类型。com/golang/protobuf/ptypes/wrappers包和谷歌的助手。戈朗。org/protobuf/types/known/wrapperspb repo。

 类似资料:
  • 问题内容: 我可以在非null字段中插入一个空字符串吗? 问题答案: 是的,您可以… NULL值的概念是SQL新手经常感到困惑的原因,他们经常认为NULL与空字符串’‘相同,或者值为零。 不是这种情况。从概念上讲,NULL表示“缺少未知值”,并且与其他值的处理方式有所不同。例如,要测试NULL,不能在大多数DBMS中使用算术比较运算符,例如=,<或<>。

  • 以下SpringBean声明似乎“按预期”运行和行为: 其中“如预期”表示“没有明显的错误”。 假设有一些复杂的生命周期(例如,使用管理外部资源),这是的有效且合理的声明吗?我能找到的所有示例(官方和非官方)都表明实例应该在中实例化,而不是存储在字段中或从字段中检索。然而,我在任何文件中都找不到任何确定的信息,说明这应该或不应该是安全的。 例如,我能找到的最相关的文档是关于SpringIoCbea

  • 问题内容: 我在解组一些我无法控制的Json时遇到麻烦。在一个字段中,有99%的时间是字符串,但偶尔是数组。 杰森如下: 错误:json:无法将数组解组为字符串类型的Go结构字段MyListItem.display_name 问题答案: 使用json.RawMessage捕获变化的字段。 使用json“-”名称对解码器隐藏字段。顶级JSON解码后,应用程序将填充此字段。 解组顶级JSON: 根据原

  • 问题内容: 我正在尝试Sphere Online Judge(SPOJ)的“下一个回文”问题,在该问题中,我需要找到最多100万个整数的回文。我曾考虑过使用Java的函数来反转字符串,但是它们是否允许字符串这么长? 问题答案: 你应该能够得到一个长度为String的字符串 总是2147483647(2 31 - 1) (由Java规范定义,阵列的最大尺寸,这对于内部存储String类用途) OR

  • 我想解析一些JSON,但一个键要么是字符串,要么是对象。 这是我当前的结构:https://github.com/PhillippOhlandt/pmtoapib/blob/master/CollectionItemRequest.go#L10 在这里,“Url”属性不仅可以是字符串,还可以是对象。 我开始为它创建一个自己的结构,覆盖对象案例。 但是这样字符串版本就不行了。有没有一种方法既能处理这

  • 我有一个可选对象: 我想返回或如果为空返回。 我们是否有比遵循更复杂的方法来实现这一点?