В этом вопросе я видел интересный подход для внедрения объектов в пользовательские десериализаторы для каркаса отображения Джексона (в настоящее время я использую версию 2.10.x ). По сути, регистрируется зависимость MyService в ObjectMapper
jsonMapper.setInjectableValues(new InjectableValues
.Std()
.addValue(MyService.class.getName(), myServiceInstance));
, а затем в классе, который расширяет StdDeserializer
, к нему можно получить доступ через DeserializationContext
, который имеет метод findInjectableValue
.
Теперь, я надеюсь, библиотека предоставляет симметричный c подход для сериализации, но, честно говоря, не смог найти его. В частности, если у вас есть класс, который расширяет StdSerializer
, вам нужно будет реализовать метод serialize(ProjectSerializable value, JsonGenerator jsonGenerator, SerializerProvider provider)
, который, кажется, не имеет класса с аналогичными функциями DeserializationContext
.
Итак, как можно можно добиться такого же «впрыскивания» с помощью настраиваемого сериализатора, не прибегая к уродливым решениям, основанным на статичном c доступе к поставщикам экземпляров или другим непроверяемым вещам.