Внедрение зависимостей в пользовательский десериализатор ДжексонаJAVA

Программисты JAVA общаются здесь
Anonymous
Внедрение зависимостей в пользовательский десериализатор Джексона

Сообщение Anonymous »

Поскольку Джексон рефлективно создает экземпляры ваших специальных десериализаторов, означает ли это, что ваши пользовательские десериализаторы не могут выполнять «внедрение зависимостей», объявлять зависимости в своем конструкторе?
Кроме того, существуют ли способы «автоматического связывания» таких зависимостей с помощью Spring?

Код: Выделить всё

    @JsonDeserialize(using=DateTimeFormatDeserializer.class)

Код: Выделить всё

public class DateTimeFormatDeserializer extends JsonDeserializer{

// no declared constructor, implicit no-args only

@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt)
Позвольте мне подчеркнуть, что десериализаторы не являются глобальными, а объявляются на разовой основе:

Код: Выделить всё

    @JsonProperty("Evn_setDT") // weirdly named property coming from external API
@JsonSerialize(using = DateTimeFormatSerializer.class)
@JsonDeserialize(using = DateTimeFormatDeserializer.class)
private Date evnSetDT;
Я предполагаю (поправьте меня, если я ошибаюсь), что это означает объявление bean-компонента следующим образом

Код: Выделить всё

    @Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
builder.deserializerByType(Date.class, new DateTimeFormatDeserializer(myService)); // Register the deserializer bean
return builder;
}
это не вариант.
Я хотел бы внедрить поддерживаемые форматы дат в десериализатор, чтобы такие форматы можно было перечислить в файле свойств и при необходимости изменить без пересборки проекта (или внедрения непосредственно в модульный тест).
Java 8, Jackson 2.13.2.2, Spring 5.3.18.>

Вернуться в «JAVA»