在 Jackson StdDeserializer 的自定义实例中自动装配 Bean
Posted
技术标签:
【中文标题】在 Jackson StdDeserializer 的自定义实例中自动装配 Bean【英文标题】:Autowiring Beans in Custom instance of Jackson StdDeserializer 【发布时间】:2018-07-31 02:22:19 【问题描述】:我有一个使用自定义反序列化器的请求对象,用于对象成员
@JsonDeserialize(using = SomeClassDeserializer.class)
private SomeClass someClass;
默认情况下,Spring Boot 不会自动装配带注释的字段,即使该类使用 @Component
注释,因为 Jackson 处理实例化。如何解决保留 Jackson 所需的默认构造函数并注入 bean 以在 Deserializer 中使用?
【问题讨论】:
【参考方案1】:我发现答案在于第三个构造函数,它使用传统的@Autowired
注释并以这种方式注入所需的 bean。但是,不是使用典型的成员分配实例,而是将该字段声明为静态并将这个注入的 bean 分配给 Jackson 生成的反序列化器的所有实例。这是一种 hacky 解决方法,但它为我解决了问题。
public class SomeClassDeserializer extends StdDeserializer<SomeObject>
private static SomeUtil someUtil;
public SomeClassDeserializer(Class<?> vc)
super(vc);
public SomeClassDeserializer()
this(null);
@Autowired
public SomeClassDeserializer(SomeUtil someUtil)
this(null);
SomeClassDeserializer.someUtil= someUtil;
【讨论】:
andrewdleach,我遇到了你提到的同样的问题,你能提供你的代码来解决你上面实现的问题吗? @user2917559 查看修改后的答案以上是关于在 Jackson StdDeserializer 的自定义实例中自动装配 Bean的主要内容,如果未能解决你的问题,请参考以下文章