目前,我正在使用自定义JsonDeserialize类注册我的类,并在应用开始时声明了一个新的SimpleModule,例如

public static void configure(ObjectMapperModule mapper) {
  SimpleModule module = new SimpleModule();
  module.addDeserializer(LocalFile.class, new LocalFileDeserializer());
  // module add more deserializer class
  mapper.registerModule(module);
}


无论如何,我可以创建一个扩展SimpleModule的类,以便可以在构造函数中注册所有类吗?我在下面尝试过,但是失败了,

public class MyCustomModule extends SimpleModule {
    private static final SimpleModule module = new SimpleModule();

    public MyCustomModule() {
        initMyCustomModule();
    }

    final void initMyCustomModule() {
        module.addDeserializer(LocalFile.class, new LocalFileDeserializer());
    }
}

// In app start
mapper.registerModule(new MyCustomModule());


我已经看到initMyCustomModule在应用启动期间被调用,但是尝试从请求中反序列化对象时未调用反序列化类,我在想,因为我应该在类中注册模块,例如:mapper.registerModule(new MyCustomModule()。module)?我还注意到有一种替代方法

@Override
public void setupModule(SetupContext context)


但我不确定如何使用它addDeserializer进入上下文...

最佳答案

好像这样工作...我不需要声明一个新的SimpleModule实例并在构造函数中使用它,我可以在构造函数中直接使用addDeserializer

public class MyCustomModule extends SimpleModule {
    public MyCustomModule() {
        initMyCustomModule();
    }

    final void initMyCustomModule() {
        addDeserializer(LocalFile.class, new LocalFileDeserializer());
    }
}

关于java - Java如何创建扩展Si​​mpleModule for addDeserializer的模块类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62025602/

10-09 01:51
查看更多