Десериализация двоичных и json-сообщений в один и тот же объект передачи - PullRequest
0 голосов
/ 14 апреля 2019

Предположим, что конечная точка покоя, которая использует двоичные сообщения avro. Вы хотели бы также предоставить вторую конечную точку для пользователей, которые хотели бы передавать те же данные, придерживаясь той же схемы avro, но они хотели бы отправлять данные с использованием JSON.

Это описано в этой статье и работает: https://callistaenterprise.se/blogg/teknik/2018/09/25/avro-serialization-with-spring-mvc/

... если вам не нужно использовать дополнительное поле. Я не знаю, но кажется, что реализация опциональности через объединения была the_great_mistake, так как кажется, что она разрушает совместимость с обычными JSON, и вам нужно передавать метаданные вместе с данными, что недопустимо. Мы не можем заставить клиентов отправлять:

{"key":{"string":"value"}}

вместо

{"key":"value"}

и, насколько мне известно, невозможно отправить правильный json и десериализовать его, используя DecoderFactory.get().jsonDecoder.

Вопросы: 1. Прав ли я, это действительно невозможно, или есть какой-то способ десериализации? 2. Если предположить, что это невозможно, есть ли другие способы, как использовать одно общее TO Java, к которому будут десериализованы avro и json? Я не прошу ничего связанного с остальным, просто как десериализовать двоичные и json-сообщения в один и тот же объект передачи.

ради обсуждения можно принять схему:

{
  "namespace": "namespace",
  "name": "SomeClass",
  "type": "record",
  "fields": [
    {
      "name": "optionalField",
      "type": ["null", "string"],
      "default": null
    }
  ]
}
...