Как сделать protobuf нечувствительным к регистру? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть такой протокол с протоколом протубуф,

message Car{ string carId = 1; }

Я генерирую Java-классы из этого контракта и использую его для анализа запроса JSON.

Теперь, если в моем JSON есть "CarID" или "carid", сгенерированные protobuf классы Java не распознают это поле. Как я могу сделать это без учета регистра?

1 Ответ

0 голосов
/ 27 апреля 2018

Дескриптор протобуфа (.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

Использовать имя поля прото вместо названия lowerCamelCase: по умолчанию proto3 JSON-принтер должен преобразовать имя поля в lowerCamelCase и использовать это как имя JSON. Реализация может предоставить возможность использовать вместо этого в качестве имени JSON используется поле прото. Парсеры Proto3 JSON требуется принять как преобразованное имя lowerCamelCase и имя прото поля.

С точки зрения вашего синтаксического анализатора "carID" и "CarID" одинаковы, поскольку они автоматически преобразуют "CarID" в "carID". Но «carId» и «carid» всегда будут разными.

...