Только что поиграл с этим на днях и боролся с ним несколько часов, пробуя методы @Category
и другие, пока не обнаружил следующее: вы можете создать свойство типа Splittable
, которое представляет базовый транспортТип, который имеет некоторую кодировку для логических / Strings / Lists / Maps.В моем случае я знаю какой-то обволакивающий тип, который проходит через провод во время разработки, и, основываясь на каком-то другом свойстве, некоторым другим полем может быть любое количество других автобинов.
Вам даже не нужно знатьтип другого bean-компонента во время компиляции, вы можете получить значения, используя методы Splittable
, но, в любом случае, если вы используете autobean-компоненты, неплохо определить обернутые данные.
interface Envelope {
String getStatus();
String getDataType();
Splittable getData();
}
(Сеттеры могут быть желательны, если вы отправляете данные, а также получаете их - кодирование bean-компонента в `Splittable 'для отправки его в конверте даже проще, чем его декодирование)
JSON, отправленный по сети, декодируется (возможно, сAutoBeanCodex
) в тип Envelope
, и после того, как вы определили, какой тип должен выходить из метода getData()
, вызовите что-то вроде этого, чтобы получить вложенный объект
SpecificNestedBean bean = AutoBeanCodex.decode(factory,
SpecificNestedBean.class,
env.getData()).as();
.Тип Envelope
и вложенные типы (в factory
выше) даже не обязательно должны быть одного типа AutoBeanFactory
.Это может позволить вам абстрагироваться от чтения / записи конвертов из общего экземпляра транспорта и использовать конкретную фабрику для каждого строкового свойства dataType
для декодирования модели данных (и вложенных моделей).