如何阻止Protobuf在API响应中剔除字段默认值?
Protobuf JSON输出保留默认值的解决方案
你遇到的问题是Protobuf JSON格式化器默认会省略带有默认值的字段,直接修改现有代码的格式化器配置就能解决,不需要合并响应。
修改Clojure代码的方法
原代码中的JsonFormat/printer默认不输出默认值字段,只需调用.includingDefaultValueFields()方法开启强制输出默认值的选项即可,修改后的代码如下:
(-> (JsonFormat/printer) (.includingDefaultValueFields) (.print proto) (json/parse-string true))
说明
Protobuf的JsonFormat.Printer类提供了includingDefaultValueFields()配置项,开启后会在JSON输出中保留所有字段——包括值为整数0、布尔值false、空字符串等默认值的字段,正好满足你需要完整响应的需求。
修改后重新生成的JSON就会和预期一致:
{"foo": 0.0, "bar": false, "baz": "abc"}
内容的提问来源于stack exchange,提问作者Pratik
相关产品推荐
相关产品推荐

