Java Jackson按类名创建对象
是否有机会读取json类名并创建对象 我的意思是: 我有一个接口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
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字段,并引用转换器。谢谢您的指导。我需要反序列化程序,它的实现有点不同。但我找到了解决办法:)