Protobuf oneof定义合法性及对应JSON接口请求解析报错问题咨询
1. oneof字段写法合法性
你提供的oneof定义完全符合Protobuf3语法规范,是合法可用的,可以正常实现多类型互斥取值的需求。
2. JSON请求报错原因
报错的核心原因是Protobuf的JSON映射规则要求:自定义message类型不能直接使用JSON原生标量值(数字、字符串等)赋值,必须以JSON对象结构包裹对应字段。
你当前的定义里params的value是自定义的points message类型,哪怕它仅包含一个oneof字段,也不能直接传51或者"51"作为值,必须明确指定oneof对应的具体字段。
正确的请求写法示例:
"teamInfo": [ { "position":"7th", "params": {"Manchester United": {"int_value": 51}} } ]
如果需要传递字符串类型的值,对应改为{"string_value": "你要传的字符串"},传递浮点数则改为{"number_value": 12.34}即可。
至于你把map value改为string类型后请求正常,是因为string属于Protobuf原生标量类型,可以直接和JSON的字符串值映射,不需要嵌套对象结构。
如果不想每次多写一层对象嵌套,也可以使用Protobuf内置的google.protobuf.Value动态类型,它原生支持直接映射JSON标量值,不需要额外包裹字段。
内容的提问来源于stack exchange,提问作者jamesdunn3
相关产品推荐
相关产品推荐

