Я пытаюсь выполнить некоторую полиморфную десарализацию JSON с использованием Jackson, однако список подклассов неизвестен во время компиляции, поэтому я не могу использовать аннотацию @JsonSubtype на базе класс. Вместо этого я хочу использовать класс TypeIdResolver для выполнения преобразования в значение свойства и из него.Jackon JSON: Полиморфная десарализация, когда подклассы неизвестны
Список возможных подклассов, с которыми я мог столкнуться, будет динамическим, но все они зарегистрированы во время выполнения с реестром. Поэтому мне кажется, что мой объект TypeIdResolver должен иметь ссылку на этот класс реестра. Он должен работать в том, что по сути является средой инъекции зависимостей (то есть я не могу иметь одноэлементный класс, с которым советуется TypeIdResolver), поэтому я думаю, что мне нужно ввести класс реестра в TypeIdResolver. Вид кода, который я думаю, Я хочу писать это:
ObjectMapper mapper = new ObjectMapper();
mapper.something(new MyTypeIdResolver(subclassRegistry));
mapper.readValue(...)
Однако, я не могу найти способ сделать бит в середине. Единственные методы, которые я могу найти, используют аннотации java, чтобы указать, что будет TypeIdResolver.
Этот вопрос Is there a way to specify @JsonTypeIdResolver on mapper config instead of annotation? тот же, хотя мотивация отличается, и ответ заключается в использовании микширования аннотаций, который здесь не будет работать.