Spring Boot 2.1.4:@Autowired在自定义杰克逊序列化程序/反序列化器中不起作用,如何启用它?



我正在努力将弹簧组件@Autowired到我的自定义反序列化器中。

例:

@JsonDeserialize (using = SomeClassJsonDeserializer.class)
SomeClass {
[...]
}
@JsonComponent
SomeClassJsonDeserializer extends JsonDeserializer<SomeClass> {
@Autowired
private SomeService service;
@Override
public SomeClass deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
[...]
// this.service is null
}
}

我主要发现了两种对我不起作用的可能解决方案:

  • 在反序列化程序的默认构造函数中使用 SpringBeanAutoWiring支持
  • 使用HandlerInstantiator(通过配置/自定义实现(

我只使用上面示例中所示的杰克逊注释来"配置"杰克逊解析。 除了默认的 SpringBoot 自动配置之外,没有其他自定义配置以任何方式影响 Jackson。当使用@EnableWebMvc(这会破坏 Spring-Boot 自动配置,所以我不想使用它(时,组件接线确实按预期工作。

对于具有默认自动配置的普通 Spring-Boot 是否有任何官方/推荐的解决方案?

问题在于我如何使用 Spring 的 RestTemplate。

对于远程调用,我通过构造器调用(new RestTemplate(((创建了一个新的 RestTemplate 实例。 这样,Spring 就无法正确配置 RestTemplate - bean(因此 SpringBoot 自动配置和 Jackson 自动配置"连接"在一起,导致 Spring-DI 在自定义 Jackson 组件中工作(。

我只需要@Autowire Spring 提供的 RestTemplateBuilder bean 实例,然后调用 RestTemplateBuilder.build(( 来获取 Spring 创建的 RestTemplate bean 实例。

最新更新