【问题标题】:How do I make protobuf case-insensitive?如何使 protobuf 不区分大小写?
【发布时间】:2018-04-26 20:18:10
【问题描述】:

我有一个这样的 protobuf 合约,

message Car{ string carId = 1; }

我从这个合约生成 java 类并用它来解析 JSON 请求。

现在,如果我的 JSON 具有“CarID”或“carid”,那么 protobuf 生成的 java 类将无法识别该字段。如何使其不区分大小写?

【问题讨论】:

  • 我的理解是protobuf JSON序列化器总是区分大小写的。所以......不要使用“CarID”或“carid”,因为它们是错误的:)

标签: protocol-buffers protobuf-java


【解决方案1】:

protobuff 描述符 (.proto) 不区分大小写。如果你尝试编译:

message Car{
    string carId = 1;
    string carid =2;
}

你会遇到编译错误:

CARID_FIELD_NUMBER is already defined in ...

您还必须知道,对于 proto3,JSON 解析器正在处理 lowerCamelCase。如参考指南所述: https://developers.google.com/protocol-buffers/docs/proto3#json

使用 proto 字段名称而不是 lowerCamelCase 名称:默认为 proto3 JSON 打印机应将字段名称转换为 lowerCamelCase 并使用 作为 JSON 名称。一个实现可以提供一个选项来使用 proto 字段名称改为 JSON 名称。 Proto3 JSON 解析器是 需要接受转换后的 lowerCamelCase 名称和 proto 字段名称。

从您的解析器的角度来看,“carID”和“CarID”是相同的,因为它会自动将“CarID”转换为“carID”。但是“carId”和“carid”总是不同的。

【讨论】:

    猜你喜欢
    • 2019-10-04
    • 2011-10-14
    • 1970-01-01
    • 2013-03-06
    • 2012-05-25
    • 2020-11-24
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多