Я читаю этот пост на protobuf, поскольку я выполняю grp c json, чтобы заменить существующих клиентов для использования нашего json на grp c ... https://github.com/protocolbuffers/protobuf/issues/1451
builder.setName (null) не поддерживается, так как формат проводника «не» отправляет значение для null. Если это так, как мне сделать json эквивалент этих случаев
- "имя": 1234
- "имя": 0 // {defaultValue = 0 для int} на проводе
- "имя": null
- {имя не существует}
для меня, "не", вызов setName в protobuf будет = = {имя не существует} в двоичном формате, но вместо этого имя = 0 в двоичном формате. Как указать в protobuf этот случай, чтобы я мог оставаться совместимым с нашими существующими клиентами в json при переключении на protobuf?
FOR Java, в частности, нам нужен метод setAge (), и если я НЕ вызываю это, поле не будет существовать. Если я называю setAge (null), это маршал "age": null. Если я вызову setAge (0), это приведет к «возрасту»: 0 (значение по умолчанию). Если я называю setAge (56) нестандартным значением, это маршал "age": 56
Затем мы хотим того же с protobuf. Конечно, формат провода МОЖЕТ добавить дополнительные поля. Это нормально, и из-за того, что значения по умолчанию не распределяются по проводам, поэтому мы не можем определить между нулевым значением и значением по умолчанию :(. У нас все в порядке с дополнительными данными по проводам для KISS для разработчиков.
Существует ли прототипная схема, которую мы можем использовать для этого, чтобы иметь простые методы setAge (null), которые приводят к «name»: null.
Вот что я пытаюсь сделать прямо сейчас для выше
message SomeMessage {
string clientId = 1;
oneof optional_result { // "optional_" prefix here just serves as an indicator, not keyword in proto2
bool isAccepted = 5;
}
}
Затем я вижу метод getIsAccepted (), который возвращает «логическое значение». Я не вижу поля для hasIsAccepted (). Я не уверен, как определить схему для сопоставления с этим ' одно поле 'json.
LOL, потому что я только что добавил сюда grp c json для нашей платформы и не уверен, что protobuf может поддерживать все json сценарии использования ....
https://github.com/deanhiller/webpieces/tree/master/webserver-plugins/plugin-grpc-json
Бизнес-кейс: Некоторые клиенты спрашивают, хотим ли мы получить истину, если страховка принята, и ложь, если она не принята, и ноль, если она не существует. - дела здесь.
спасибо, Дин