将Spring ParameterizedTypeReference转换为Jackson TypeReference

时间:2017-11-17 22:15:40

标签: spring jackson

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

由于无关的原因,我需要将响应体作为byte []并使用Jackson手动转换为json。 杰克逊希望TypeReference班级进行转换。

我正在寻找将这些转换为类的方法。

1 个答案:

答案 0 :(得分:1)

可以使用助手类

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();
    }
};