是否有机会读取json类名称并创建和对象?
这是我的意思:
我有一个界面
public interface Converter {
void process();
}
接下来,我也有一些数据类
public class Source {
private String service;
private String path;
private Converter converter;
}
还有一个实现Converter接口的类
public class DataConverter implements Converter {
public void process() {
//some code here
}
}
最后但并非最不重要。这是我的json的一部分:
"source": {
"service": "VIS",
"path": "/",
"converter": "DataConverter"
}
因此,想法是在通过Jackson的mapper.readValue
阅读Json时创建一个DataConverter
,以便Data
类中的getter可以使用它。
谢谢!
答案 0 :(得分:1)
您可以通过编写自定义序列化器和反序列器,然后在Source
类中对该字段进行注释来实现此目的。为此,您需要实现Converter
接口。该文档建议:
注意:强烈建议实现者扩展StdConverter而不是直接实现Converter,因为这可以帮助默认实现典型的样板代码。
因此,您要针对自定义序列化程序执行以下操作:
public class ConverterSerializer extends StdConverter<Converter, String> {
@Override
public String convert(Converter value) {
if(value instanceof DataConverter) {
return "DataConverter";
} ...
return "";
}
}
然后用@JsonSerialize
注释值:
@JsonSerialize(using = ConverterSerializer.class)
private Converter converter;
反序列化也是如此,但是您将实现StdConverter<String,Converter>
,其convert方法将使用String并返回Converter
。然后,您可以使用@JsonDeserialize
注释转换器字段并引用该转换器。