Весенняя десериализация с автопроводными свойствами - возможно ли повторное использование вручную - PullRequest
0 голосов
/ 13 июня 2018

У меня есть объект doc, который имеет свой собственный аннотированный десериализатор, то есть

@JsonSerialize(using = DocDeSerializer.class)
public class Doc {

, а десериализатор выглядит как

@Service
public class DocDeserializer<T> extends JsonDeserializer<Doc> i{

@Autowired
private PropertyController ctrlProp;

@Override
public Doc deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
...

Полная десериализация для HTTP-запросов работает нормально,Но теперь у меня есть задача преобразовать строку в doc.Мой подход с

final ObjectMapper objectMapper = new ObjectMapper();
final Doc myDoc = objectMapper.readValue(strContent, Doc.class);

терпит неудачу.Причина в том, что классы с автопроводкой не инициированы должным образом, то есть ctrlProp не инициируется (= null).Итак, мой вопрос:

Есть ли простой способ повторно использовать десериализатор из Spring?И если да, то как?

ОБНОВЛЕНИЕ:

После исследований я выяснил, что это связано с конфигурацией HttpConverts.Так что мой конфиг выглядит так:

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Bean
    @Primary
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        converter.setObjectMapper(builder.build());
        return converter;
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

....
        converters.add(mappingJackson2HttpMessageConverter());
    }
}

, который используется в

@RestController
public class MyClass

@Autowired
private MappingJackson2HttpMessageConverter myJackson;

, но почему-то это тоже не получается :-( Просто для ясности, что пытались ...

...