Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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按类名创建对象_Java_Jackson_Jackson2 - Fatal编程技术网

Java Jackson按类名创建对象

Java Jackson按类名创建对象,java,jackson,jackson2,Java,Jackson,Jackson2,是否有机会读取json类名并创建对象 我的意思是: 我有一个接口 public interface Converter { void process(); } public class DataConverter implements Converter { public void process() { //some code here } } 接下来我还有一些数据类 public class Source { private String

是否有机会读取json类名并创建对象

我的意思是:

我有一个接口

public interface Converter {
    void process();
}
public class DataConverter implements Converter {
    public void process() {
        //some code here
    }
}
接下来我还有一些数据类

public class Source {
    private String service;
    private String path;
    private Converter converter;
}
和一个实现转换器接口的类

public interface Converter {
    void process();
}
public class DataConverter implements Converter {
    public void process() {
        //some code here
    }
}
最后但并非最不重要。这是我的json的一部分:

"source": {
    "service": "VIS",
    "path": "/",
    "converter": "DataConverter"
}
因此,我们的想法是在通过Jackson的
mapper.readValue
读取Json的同时创建一个
DataConverter
,这样就可以通过getter从
Data
类获得它


谢谢

您可以通过编写自定义序列化程序和反序列化程序,然后在
类中注释字段来实现这一点。为此,您需要实现接口。文件建议:

注意:强烈建议实现者扩展StdConverter,而不是直接实现Converter,因为这有助于默认实现典型的锅炉板代码

因此,对于自定义Serialiser,您需要执行如下操作:

public class ConverterSerializer extends StdConverter<Converter, String> {

@Override
public String convert(Converter value) {
    if(value instanceof DataConverter) {
        return "DataConverter";
    } ...

    return "";
}

这同样适用于反序列化,但您将实现一个
StdConverter
,convert方法将为其获取一个字符串并返回一个
转换器。然后,您可以使用
@JsonDeserialize
注释converter字段,并引用转换器。

谢谢您的指导。我需要反序列化程序,它的实现有点不同。但我找到了解决办法:)