数据构造费时?使用RestTemplate调用多个第三方接口,二次封装成新接口,提高数据构造效率。【RestTemplateUtils.java】两个文件搞定二次封装第三方接口,提效造数!!

11 篇文章 0 订阅
8 篇文章 0 订阅

   目的:通过Spring的RestTemplate,调用整合多个第三方接口,输出一个接口,以提高数据构造效率。
   选择这个方式的原因,RestTemple是前三种方式的集大成者,代码编写更加简单。 各种方式对比
  
  两个文件搞定二次封装第三方接口,提效造数!!~~

在

1、导包-最后导也行缺啥加啥

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.51</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2、新建工具类文件-RestTemplateUtils.java

   直接CV,放到项目工具类里面就行,唯一需要改的就是路径什么的用自己项目的就行。
   工具类文件代码

3、在Controller中新建.java文件,直接使用

   这个例子中,原接口有两个,一个创建商品数据post,一个审核商品数据get,我们整合后就只用调用一个接口生成所需数据。
   过程中,把原接口中很多无关紧要的参数写为固定值,直接使用所需的最终数据,已提升数据构造效率。
  
  原接口1: 创建商品原接口post

curl --location 'http://localhost/addPyGoods' \
--header 'empno: 12345' \
--header 'Content-Type: application/json' \
--data '{
    "BaseReq": {
        "cityId": "010",
        "name": "商品名称"
    },
    "ClassReq": {
        "classIdList": [
            "123456"
        ]
    }
}'
返回
{
    "rlt": true,
    "message": "操作成功!",
    "code": "000000",
    "data": "123456"
}

  原接口2: 审核商品原接口get

curl --location 'https://localhost/auditGoods?
goodsId=123456&actionStatus=1-0'\

  创建审核一体 新接口get

curl --location 'http://localhost/Goods/newaddGood?
classList=123,2C456' \
--header 'Connection: keep-alive'

  
  
  
  Controller代码如下

package com.tools.createclass.controller;     			//自己的路径可忽略

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.tools.api.entity.response.Response;
import org.springframework.web.bind.annotation.*;
import java.util.*;


import com.tools.createclass.config.RestTemplateUtils;		//我们要用的工具类
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;





/**
 * @ClassName : GoodsController
 * @Description :通过RestTemplateUtils调用第三方接口,创建商品数据
 * @Author : zxy
 * @Date: 2023
 */

@RestController
@RequestMapping("/Goods")
public class GoodsController {

    //test
    @GetMapping(value = "test")
    public Response<Object> test() {
        System.out.println("test一下");
        return Response.success("返回ok测试");
    }





    //添加商品
    @GetMapping(value = "newaddGood")
    public Response<Object> addGood(@RequestParam Map<String,Object> params) {

        //System.out.println(params); 
        //明确新接口入参数,需要自定义的只有班级id,所以就只需要填写班级id
        //入参数 接口重新封装
        String classListStr=String.valueOf(params.get("classList"));		//入参数取班级id数组
        List<String> classList = Arrays.asList(classListStr.split(","));	//字符串转列表
        



		//新增商品接口post
        //url
        String url="http://localhost/addPyGoods";
        //System.out.println("【url】:"+url);

        //header 拼接
        HttpHeaders headers = new HttpHeaders();
        headers.set("content-type","application/json;charset=UTF-8");
        headers.set("empno","12345");          //创建人写死
        //System.out.println("【headers】:"+headers);

        //json 拼接
        JSONObject json=new JSONObject();
        // 1、addPyGoodsClassReq替换classid 使用入参param中取的的classList
        String str1="{\"classIdList\": "+JSON.toJSONString(classList)+"}";      //list转json,JSON.toJSONString(classList)
        JSONObject ClassReq=JSONObject.parseObject(str1);
        // 2、addPyGoodsBaseReq内容使用默认值
        String str2="{\"cityId\": \"010\",\"name\": \"商品名称\"}";
        JSONObject BaseReq = JSONObject.parseObject(str2);
        json.put("ClassReq",ClassReq);
        json.put("BaseReq",BaseReq);
        //System.out.println("【json】"+json);


        //请求第三方接口 url,headers,json,返回string
        ResponseEntity<String> responseEntity= RestTemplateUtils.post(url, headers, json,String.class);
        //System.out.println("【responseEntity】"+responseEntity);
        if (responseEntity.getStatusCode() != HttpStatus.OK) {
            // log.error("doSendPost status error, url: {}, status: {}", url, responseEntity.getStatusCode());
            return Response.success("调用第三方接口失败,请稍后再试");
        }

        //接收创建商品接口返回体 转为json方便取值
        String result=responseEntity.getBody();
        JSONObject resultJson = JSONObject.parseObject(result);


        //取出创建接口返回的商品id
        String data=resultJson.getString("data");
        //System.out.println("视频号商品ID"+data);
        if (data == null){
            //创建失败
            return Response.success(resultJson);
        }




        //审核一下,入参数商品id------------------------------------------------------------------------------------------------------

		//审核商品接口get
		
 		//url
        String url_Audit="http://master-course-beta.speiyou.com/bedrock-course/pyGoodsBase/auditGoods?"+params_Audit;
        //System.out.println("【url_Audit】:"+url_Audit);

        //header 拼接
        HttpHeaders headers_Audit = new HttpHeaders();
        headers_Audit.set("content-type","application/json;charset=UTF-8");
        //System.out.println("【headersAudit】:"+headers_Audit);

        //params_Audit入参数 拼接
        String params_Audit="goodsId="+data+"&actionStatus=1-0";
        //System.out.println("【params_Audit】:"+params_Audit);

       
        //请求第三方接口 url,headers,json,返回string
        ResponseEntity<String> responseEntity_Audit= RestTemplateUtils.get(url_Audit, headers_Audit,String.class);
        //System.out.println("【responseEntity_Audit】"+responseEntity_Audit);
		if (responseEntity.getStatusCode() != HttpStatus.OK) {
            // log.error("doSendPost status error, url: {}, status: {}", url, responseEntity.getStatusCode());
            return Response.success("调用第三方接口失败,请稍后再试");
        }

		//返回最后结果
        return Response.success(resultJson);
    }

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Cyril-zxy

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值