【发布时间】:2017-11-18 07:18:04
【问题描述】:
我在库中使用 spring RestTemplate。库方法的输入接受 ParameterizedTypeRecerence 并将其传递给 rest 模板进行转换。
由于不相关的原因,我需要将响应正文作为 byte[] 并使用 Jackson 手动转换为 json。
Jackson 期望 TypeReference 类进行转换。
我正在寻找一种将这些转换为类的方法。
【问题讨论】:
我在库中使用 spring RestTemplate。库方法的输入接受 ParameterizedTypeRecerence 并将其传递给 rest 模板进行转换。
由于不相关的原因,我需要将响应正文作为 byte[] 并使用 Jackson 手动转换为 json。
Jackson 期望 TypeReference 类进行转换。
我正在寻找一种将这些转换为类的方法。
【问题讨论】:
可以使用辅助类
public class CustomTypeReference extends TypeReference<Object>{
private final Type type;
public CustomTypeReference(ParameterizedTypeReference pt){
this.type = pt.getType();
}
@Override
public Type getType() {
return type;
}
}
并像这样使用它:
ParameterizedTypeReference<List<String>> typeRef
= new ParameterizedTypeReference<List<String>>() {};
TypeReference tr = new CustomTypeReference(typeRef);
ObjectMapper mapper = new ObjectMapper();
String jsonStr = "[\"key\", \"someStr\"]";
List<String> data = mapper.readValue(jsonStr, tr);
或者只是匿名TypeReference<Object>
ParameterizedTypeReference<List<String>> typeRef
= new ParameterizedTypeReference<List<String>>() {};
TypeReference tr = new TypeReference<Object>(){
public Type getType() {
return typeRef.getType();
}
};
【讨论】:
TypeReference<List<String>> tr = new CustomTypeReference(typeRef);
TypeReference tr = new CustomTypeReference(typeRef); 或 TypeReference