我目前正在尝试显示或记录 protobuff 帧的空值或默认值。在我的情况下,协议缓冲区是通过 RS232 链接使用的,我需要显示未在有效负载中发送的默认值(我知道它们是隐式的(我首先想到使用方法 .hasField(field(,但由于 .proto 文件的长度,它没有适应。 我尝试在打印机上使用 Json 格式 返回的指针是带有 " 的字段。
FromSender Message = FromSender.parseFrom(receivedFrame.getPayload());
Printer p = JsonFormat.printer().includingDefaultValueFields();
String result = p.print(Message);
我终于成功地使用了这种方法。我只是使用构建器将打印机放入方法中
public String getDefaultValue() {
StringBuilder builder = new StringBuilder();
try {
if(FrameMessage != null) {
Printer p = JsonFormat.printer().includingDefaultValueFields();
builder.append(p.print(FrameMessage));
}
} catch (InvalidProtocolBufferException e) {
LOGGER.error("Error while parsing message", e);
e.printStackTrace();
}
return builder.toString();
}