springboot中基于RestTemplate 类 实现调用第三方API接口,获取响应体内容不需要转换数据类型【丰富版】

RestTemplate 用法 和 http工具类 这篇就不说了 可以去看下面的博客
本篇文章是 针对 下面的博客 进行的扩展

https://blog.csdn.net/Drug_/article/details/137166797
我们在调用第三方 api接口 时候

在获取相应体的时候 不知道用什么数据类型 去接 响应体里的数据
用 字符串 用 fastjson里的 JSONObject 或者 用 java对象 好像都不方便
如果接到 数据 不是我们想要的对象 我们还需要 来回转换 很烦

比如 用 字符串 接 json字符串
接到后 再 用 fastjson转换成我们想要的 java对象

又比如 用 fastjson里的 JSONObject 对象接 接后 我们要么 get(“aaa”) 去取数据
要么 拿到这个对象 还要再 转换成 java对象

所以有没有 一种方案 指定响应体里的 数据类型 取到 直接是我们想要的

下面 是利用泛型 可以灵活 配置 响应体 接的类型 增强版

之前的 老写法 从上篇博客里复制过来 进行对比的

  /**
     * 调用第三方服务器接口  get
     *
     * @param url         路由
     * @param httpHeaders 请求头
     * @return 返回相应所有参数
     */
    public static ResponseEntity<String> doGet(String url, HttpHeaders httpHeaders) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

        // 设置请求头
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity httpEntity = new HttpEntity(httpHeaders);
        // 发送 GET 请求
        return restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);

    }

这种 获取到 响应体 用String  来接数据 接到数据后 还要来回转换 数据类型 

下面的是 扩展后的写法

目前只扩展了 doGet 方法 post 大家有兴趣 根据 doGet的写法 可以 也扩展一下
这样就不用 获取到 第三方的 json数据 来回转换了 直接用

   /**
     * 调用第三方服务器接口  get
     *
     * @param url         路由
     * @param httpHeaders 请求头
     * @param responseType 响应类型
     * @return 返回相应所有参数
     */
    public static <T> ResponseEntity<T> doGet(String url, HttpHeaders httpHeaders, ParameterizedTypeReference<T> responseType) throws Exception {
        RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());
        //此处加编码格式转换
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

        // 设置请求头
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity httpEntity = new HttpEntity(httpHeaders);
        // 发送 GET 请求
        return restTemplate.exchange(url, HttpMethod.GET, httpEntity, responseType);
    }

    public static <T> T doGet(String url,ParameterizedTypeReference<T> responseType) throws Exception {
       return doGet(url,new HttpHeaders(),responseType).getBody();
    }

调用 例子:

@Data
public class ParkResponse<T>  {
    Boolean success;
    String errMsg;
    T data;
}

这样 返回值 就直接是我们想要的对象 不用来回转换了

    ParkResponse<List<ParkRegionSet>> parkResponse = HttpUtil.doGet(url,new ParameterizedTypeReference<ParkResponse<List<ParkRegionSet>>>(){});
     if (success.equals(parkResponse.getSuccess())) {
                List<ParkRegionSet> data = parkResponse.getData();
                if(ObjectUtils.isEmpty(data)){
                    return new ArrayList<>();
                }
                return data;
     }

解释:

new ParameterizedTypeReference<ParkResponse<List<ParkRegionSet>>>(){}

ParkResponse<List<ParkRegionSet>>  
//这个就是 指定 响应体的数据类型 用泛型  这样我们传入什么  就用什么接 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json____

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值