【发布时间】:2021-07-24 06:15:14
【问题描述】:
我有一个包含布尔字段的 protobuf 消息。当我将false 值传递给请求中的布尔字段时,当我解析请求时,包含false 值的字段将被忽略。例如下面:
message Features {
bool enable_config = 1;
bool enable_logo_on_screen = 2;
string custom_url = 3;
bool enable_footer = 4;
}
message UpdateFeaturesRequest {
Features features = 1;
}
假设 Features 对象已经存在于包含以下值的数据库中:
{
enableConfig: true,
enableLogoOnScreen: true,
customUrl: "https://custom.url.uk/app",
enableFooter: true
}
现在我想要一个 grpc 更新请求,它可以更新功能的特定字段,所以当我触发 UpdateFeaturesRequest 时,如下所示:
{
enableConfig: false,
customUrl: "https://custom2.url.hu/app"
}
预期的输出是在 DB 中有一个更新的特征对象,例如:
{
enableConfig: false,
enableLogoOnScreen: true,
customUrl: "https://custom2.url.hu/app",
enableFooter: true
}
但不幸的是,我无法检测到 false 原始消息中的 false 值。我将要素对象以 JSON 格式保存在数据库中。
所以,当我这样做时:
updateFeaturesRequest.getFeatures() 然后布尔 false 值将被忽略。我怎样才能让 UpdateFeaturesRequest 中 仅 存在的 bool false 值。
我必须知道 Json 格式化程序会忽略布尔错误值,我们必须执行以下操作:
JsonFormat
.printer()
.includingDefaultValueFields()
.print(message);
但这也包括 protobuf 消息中存在的其他默认值。我只想更新UpdateFeaturesRequest 中存在的特定字段。有人可以帮忙吗。
【问题讨论】:
标签: java-8 protocol-buffers grpc-java