jackson 反序列化泛型

springboot默认使用jackson序列化和反序列化,在使用RestTemplate接收响应时,有时需要反序列化为泛型,观察RestTemplate的exchange方法,有个ParameterizedTypeReference参数用来支持泛型

public <T> ResponseEntity<T> exchange(URI url, HttpMethod method, @Nullable HttpEntity<?> requestEntity,
			ParameterizedTypeReference<T> responseType);

比如可以这样

// 泛型为接口返回数据的类型
        ParameterizedTypeReference<CommonResult<User>> responseBodyType =
                new ParameterizedTypeReference<CommonResult<User>>() {
                };
        ResponseEntity<CommonResult<User>> responseEntity = restTemplate.exchange(uri,
                HttpMethod.POST, request, responseBodyType);

注意必须使用exchange方法,只有exchange方法有org.springframework.core.ParameterizedTypeReference参数。

fastjson 反序列化泛型

使用com.alibaba.fastjson.TypeReference#TypeReference()

//String jsonStr = ""
JSON.parseObject(jsonStr,new TypeReference<CommonResult<User>>(){
      })