Для контекста мы храним большую часть наших данных в виде строк JSON. Это очень хорошо работает с Hadoop на бэкэнде и легко реализуется в Ruby во фронтэнде. Мои типы данных соответствуют естественному шаблону наследования.
Для простоты предположим, что у меня есть класс Pet и процесс FeedPet, который кормит питомца. У меня также есть процесс WalkDog, который применим только к собаке, которая является своего рода домашним животным. Мои данные организованы таким образом, что мне не нужно беспокоиться о том, чтобы пытаться выгуливать домашнее животное, которое не является собакой.
Я бы хотел, чтобы Pet и Dog расширяли Pet, а Dog имел дополнительный метод getLeash (), но я не могу понять, как сопоставить это с JSON.
Вместо этого у меня есть класс Pet с хэш-картой данных вида, поэтому процесс WalkDog будет вызывать pet.getSpeciesData ("leash") вместо dog.getLeash ().
Я могу создать Dog extends Pet и сериализовать его в JSON с помощью библиотеки Джексона. У объекта JSON будет поле привязи. Но предположим, что я хочу накормить всех домашних животных. У всех питомцев есть метод getFood (). Итак, процесс FeedPet десериализует объекты в Pet. Но при этом теряется поводковое поле.
Процесс WalkDog может это сделать, потому что он знает, что все его входные данные будут собаками, поэтому он может читать его как Dog и записывать обратно как Dog.
Есть ли способ сериализовать java-объекты в JSON, чтобы я мог сохранить их тип? Я думаю о чем-то вроде наследования одной таблицы Rails, но это должно быть что-то, что понимают библиотеки JSON.