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

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


即使类使用@Component注释,Spring Boot默认情况下也不会自动装配注释字段,因为Jackson会处理实例化。如何保留杰克逊所需的默认构造函数,并注入可在反序列化器中使用的bean?

最佳答案

我发现答案在于使用常规@Autowired注释的第三个构造函数,并以这种方式注入所需的bean。但是,不要使用成员分配的典型实例,而是将字段声明为static并将此注入的bean分配给Jackson生成的反序列化器的所有实例。这是一种解决方法,但是它为我解决了问题。

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;
    }

07-25 22:21