将 Spring ParameterizedTypeReference 转换为 Jackson TypeReference

Ara*_*ash 3 spring jackson

我在库中使用 spring RestTemplate。库方法的输入接受 aParameterizedTypeRecerence并将其传递给剩余模板进行转换。

由于不相关的原因,我需要将响应正文获取为 byte[] 并使用 Jackson 手动转换为 json。杰克逊希望有一个TypeReference类来完成转换。

我正在寻找一种将它们转换为类的方法。

var*_*ren 10

可以使用辅助类

public class CustomTypeReference extends TypeReference<Object>{
    private final Type type;

    public CustomTypeReference(ParameterizedTypeReference pt){
        this.type = pt.getType();
    }

    @Override
    public Type getType() {
        return type;
    }
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

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);
Run Code Online (Sandbox Code Playgroud)

或者只是匿名TypeReference<Object>

ParameterizedTypeReference<List<String>> typeRef
        = new ParameterizedTypeReference<List<String>>() {};

TypeReference tr = new TypeReference<Object>(){
    public Type getType() {
        return typeRef.getType();
    }
};
Run Code Online (Sandbox Code Playgroud)