假设我们有一个像这样的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>>() {});
我可以以某种方式让Jackson将类“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>>() { });