在Jackson StdDeserializer的自定义实例中自动装配Bean

时间:2018-02-20 16:39:37

标签: java spring spring-boot jackson json-deserialization

我有一个请求对象,使用自定义反序列化器作为对象的成员

@JsonDeserialize(using = SomeClassDeserializer.class)
private SomeClass someClass;

弹出引导默认情况下不会自动注释带注释的字段,即使该类使用@Component进行注释,因为Jackson处理实例化。我如何解决保留Jackson所需的默认构造函数,并注入bean以用于解串器?

1 个答案:

答案 0 :(得分:1)

我发现答案在于第三个构造函数使用传统的@Autowired注释并以这种方式注入所需的bean。但是,不是使用成员赋值的典型实例,而是将该字段声明为static,并将此注入的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;
    }