Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson:在反序列化期间传递exta对象_Java_Jackson - Fatal编程技术网

Java Jackson:在反序列化期间传递exta对象

Java Jackson:在反序列化期间传递exta对象,java,jackson,Java,Jackson,在反序列化过程中,如何传入初始化某个类成员所需的额外对象?如果我“手动”进行反序列化,则实现可能如下所示: public class MyClass { private MyDocumentObject do; private String food; public MyClass(JsonNode node, MyDocument document) { this.do = document.createMyDocumentObject();

在反序列化过程中,如何传入初始化某个类成员所需的额外对象?如果我“手动”进行反序列化,则实现可能如下所示:

public class MyClass {

    private MyDocumentObject do;
    private String food;

    public MyClass(JsonNode node, MyDocument document) {
        this.do = document.createMyDocumentObject();
        this.food = node.get("food").asText();
    }

    public String getFood() {
        return this.food;
    }

}
但我希望使用Jackson的自动映射工具,使用修饰的构造函数或自定义反序列化器等,并避免在类本身中实现反序列化。查看使用
@JsonCreator
或扩展
StdDeserializer
的示例实现,我看不到一种说法“嘿,请在调用构造函数时使用这个
MyDocument
对象。”我希望避免实现和公开一个单独的方法,该方法接受我必须在每个反序列化对象上调用的
MyDocument
,例如

public createDocumentObject(MyDocument document) {
    this.do = document.createMyDocumentObject();
}

我根本不想使用这个方法,但如果我必须这样做,我希望Jackson在反序列化之后立即为我调用这个方法。这意味着我仍然必须告诉Jackson要使用哪个
MyDocument

怎么样:您的所有类都扩展了一个具有
MyDocumentObject
的公共抽象类,并且您为您的抽象类声明了一个自定义反序列化器?我不知道抽象类对这个问题有什么好处,但我想实际上有一个非常简单的解决方案,只需在反序列化器的构造函数中添加
MyDocument
ObjectMapper mapper=new ObjectMapper();SimpleModule=新的SimpleModule();module.addDeserializer(MyClass.class,新的MyClassDeserializer(document));映射器注册表模块(模块)怎么样:你所有的类都扩展了一个普通的抽象类,这个抽象类有
MyDocumentObject
,你为你的抽象类声明了一个自定义反序列化程序?我不知道抽象类对这个问题有什么好处,但我想实际上有一个非常简单的解决方案,只需在反序列化器的构造函数中添加
MyDocument
ObjectMapper-mapper=new-ObjectMapper();SimpleModule=新的SimpleModule();module.addDeserializer(MyClass.class,新的MyClassDeserializer(document));映射器注册表模块(模块)