java - 如何让杰克逊将泛型类注入 bean?
问题描述
让我们假设,我们有一个像这样的 bean:
public class Response<T> {
private T data;
private double executionDuration;
private boolean success;
private String version;
//HOW TO Make Jackson to inject this?
private Class<T> dataClass;
public Optional<T> getData() {
return Optional.ofNullable(data);
}
public double getExecutionDuration() {
return executionDuration;
}
public Class<T> getDataClass() {
return dataClass;
}
public String getVersion() {
return version;
}
public boolean isSuccess() {
return success;
}
}
反序列化是这样发生的:
objectMapper.readValue(json, new TypeReference<Response<SomeClass>>() {});
我可以让杰克逊以某种方式将“SomeClass”类注入我的bean吗?我认为注入类型引用本身也可以。
解决方案
如果不希望将类信息保存在 json 中并使用,@JsonTypeInfo
我建议使用@JacksonInject
:
public class Response<T> {
private T data;
private double executionDuration;
private boolean success;
private String version;
@JacksonInject("dataClass")
private Class<T> dataClass;
public Optional<T> getData() {
return Optional.ofNullable(data);
}
public double getExecutionDuration() {
return executionDuration;
}
public Class<T> getDataClass() {
return dataClass;
}
public String getVersion() {
return version;
}
public boolean isSuccess() {
return success;
}
}
反序列化看起来像:
ObjectMapper mapper = new ObjectMapper();
InjectableValues.Std injectable = new InjectableValues.Std();
injectable.addValue("dataClass", SomeClass.class);
mapper.setInjectableValues(injectable);
final Response<Integer> response = mapper.readValue(json, new TypeReference<Response<SomeClass>>() { });
推荐阅读
- java - 使用数组在 MySQL 中插入值
- javascript - 如何在 R 中的同一个箱形图上绘制来自一个数据集的 2 组分类数据
- python - 减少张量收缩的缩放
- javascript - 使用减少组排序使用 javascript 获取和显示 json 数据
- scala - 如果另一列为假,则更改为空数组
- arrays - 查找项目任务列表分配给项目的是/否(数组 vlookup?)
- python - 括号位置更改使用 OpenSimplex 生成噪声的结果
- c# - Oracle客户端在打开连接时抛出错误
- docusignapi - 将生成的 pdf 发送到 docusign 并允许多个签名
- java - How to check Boolean for null?