grpc官方推荐使用google.protobuf.FieldMask
来实现数据的部分字段更新,而在使用过程中出现了如下问题:
项目中使用了grpc-gateway
,那么前端可以直接通过http协议
访问后端接口,请求体中数据格式为json
;
对于google.protobuf.FieldMask
类型的数据,前端之前一直通过如下的方式进行请求,之后项目被其他人接手,某次重新部署代码后,前端请求时就一直报错,报错信息如下所示
# 请求体:
{
"update_mask": {
"paths":["update_object1", "update_object2"]
}
}
# 错误信息
{
"code": 3,
"message": "proto: syntax error (line xx:xx): unexpected token {",
"details": []
}
排查后发现,我之前一直使用grpc-gateway
包,而现在使用的时grpc-gateway/v2
包,包的版本发生了变化;查看源码后发现,在v2
版本中,对于google.protobuf.FieldMask
类型的数据,请求体应该采用如下格式进行请求:
# v2请求体:
{
"update_mask": "updateObject1, updateObject2"
}
至此问题解决。