У меня есть объект 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;
, но почему-то это тоже не получается :-( Просто для ясности, что пытались ...