解决protobuf忽略空返回值的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决protobuf忽略空返回值的问题相关的知识,希望对你有一定的参考价值。

参考技术A 最近在用Kratos开发项目的时候遇到了问题,repeated类型的字段在值为空的情况下,字段被直接忽略掉了。

我希望的是即使为空的情况下也能返回一个空数组,而不是直接把整个字段忽略掉,就像下面这样:

经过多方排查之后找到了问题所在,google会在生成pb.go文件时在json标签里插入 omitempty 属性,而json库在转换json时一旦遇到这个标签就会忽略掉空字段,这不符合我的需求,所以把这个字段去掉就好了。

先写一个shell脚本来递归遍历api目录下的pb.go文件:

接着修改Makefile文件:

在api的最下面添加替换脚本,流程就是遍历scandir脚本查出来的pb.go文件,替换掉文件里所有的omitempty,然后将文件暂存为.tmp,最后再覆盖原文件。

今后每次执行make api时就会连带自动替换掉所有生成文件中的omitempty,免得每次手动替换麻烦又容易出错。

参考: https://ld246.com/article/1591110788411

以上是关于解决protobuf忽略空返回值的问题的主要内容,如果未能解决你的问题,请参考以下文章

SqlServer函数的聚合函数

返回 SQL 中返回空值的行?显示它们不是空白值

protobuf-net 序列化返回空数组

Spring JDBC为具有值的列返回空值

springmvc中Controller返回json时不处理空值的方法

空参数值的 s-s-rS 表达式返回 #Error