gpt4 book ai didi

java - Jackson 通过类名创建对象

转载 作者:行者123 更新时间:2023-12-02 10:31:04 25 4
gpt4 key购买 nike

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

这就是我的意思:

我有一个界面

public interface Converter {
void process();
}

接下来我还有一些数据类

public class Source {
private String service;
private String path;
private Converter converter;
}

以及一个实现Converter接口(interface)的类

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 类中获取它.

谢谢!

最佳答案

您可以通过编写自定义序列化器和反序列化器,然后在 Source 中注释该字段来实现此目的类(class)。为此,您需要实现 Converter 界面。该文档建议:

NOTE: implementors are strongly encouraged to extend StdConverter instead of directly implementing Converter, since that can help with default implementation of typically boiler-plate code.

因此,您想要为自定义序列化程序执行类似的操作:

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 注释转换器字段。并引用转换器。

关于java - Jackson 通过类名创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com