首页 > 其他分享 >对接第三方接口教程(发送Http请求及返回参数处理)

对接第三方接口教程(发送Http请求及返回参数处理)

时间:2023-06-01 12:01:02浏览次数:40  
标签:教程 Http get jsonObject formData 接口 toString put new

1.首先Http工具类建议使用

 

package cn.hutool.http;
//这个包下面的
HttpUtil.post(String urlString, String body)
这个方法会省去很多事情,不用去设置header的一些基本东西,get就不说了,get也能用post请求,把参数拼url后边就行了

 2.要看第三方接口的鉴权是如何做的,如果是token鉴权,那么在请求业务方法之前还要先请求获取token的接口。获取token后最好把token放到缓存里,避免每次都请求token。

如果是秘钥鉴权,比较简单,把秘钥放在body里,跟参数一块发过去,主要看第三方的接口文档。如果需要秘钥放在header里,那么要用 HttpUtil.createPost()这个方法。

3.是要看返回值的处理,一般先有个状态码,为成功的话处理,否则抛异常

最好写一个映射实体类,和返回的data里的一致,然后强转就可以了。图快的话也可以用map

4.代码案例,下面贴两个代码段

1)

HashMap<String,Object> req = new HashMap<>();
        req.put("product","xx");  //鉴权用
        req.put("sign","xxx-xxx");//签名,相当于秘钥,鉴权用
        req.put("userId",erpUserId);
        HashMap<String,Object> formData = new HashMap<>();
        formData.put("name",crmCustomer.getCustomerName()); 
        formData.put("relaCustsupCode",crmCustomerExt.getCustomerCode());
        formData.put("province",crmCustomerExt.getAddrProvince());
        formData.put("city",crmCustomerExt.getAddrCity());
        formData.put("inPool",crmCustomerExt.getIsEnterpool());
        formData.put("custIndustry",crmCustomerExt.getCustomerIndustry());
        req.put("formData",formData);
        String codeMsg = "";
        try{
            JSONObject o = (JSONObject) JSON.toJSON(req); //先把map转成josn对象
            String body = HttpUtil.post(ERP_DOMAIN_URL+"/api-suppliers/busi/comm/api/ibf/suppliers/bl/add", o.toJSONString()); //把josn对象转成josn字符串
            JSONObject jsonObject = JSON.parseObject(body);
            if (jsonObject != null && jsonObject.get("code").equals("0000")) {
                JSONObject data = (JSONObject) jsonObject.get("data");
                //todo 返回值处理  根据给的接口文档,对返回参数进行处理,也可以debug跟文档对一下return true;
            } else {
                codeMsg = jsonObject.get("codeMsg").toString();
                throw new CrmException(500,codeMsg);
            }
        } catch (Exception e) {
            log.error("推送数据至ERP失败,请重试!客户:" +crmCustomer.getCustomerName());
            throw new CrmException(500,codeMsg);
        }

 

2)

try {
            String body = HttpUtil.createPost("http://url/crm_department_info/execute")
                    .header("Content-Type","application/json;charset=UTF-8")
                    .header("appKey","xx")
                    .header("appSecret","xxxxx")
                    .execute().body();
            JSONObject jsonObject = JSON.parseObject(body); //将返回的信息转成json对象
            if (jsonObject != null && jsonObject.get("code").equals(200)) {
                if (jsonObject.get("data") == null) {
                    return true;
                } else {
                    JSONArray data = (JSONArray) jsonObject.get("data");  //这个data里是一个list。这里有两种处理方案,一种是声明类,字段与JsonArray里的一致,然后强转出来,不想写类的话,就用我下面这种
                    List<HashMap<String,Object>> hashMapList = new ArrayList<>();
                    List<DeptIdCodeMatch> deptIdCodeMatchList = this.queryDeptIdCodeMatchList();
                    Map<String, DeptIdCodeMatch> maps = deptIdCodeMatchList.stream().collect(Collectors.toMap(
                            DeptIdCodeMatch::getDeptCode, Function.identity(), (key1, key2) -> key2));
                    for (Object obj: data) {
                        HashMap<String,Object> hp = JSONObject.parseObject(JSONObject.toJSONString(obj), HashMap.class);//遍历JsonArray,放到map里
                        hashMapList.add(hp);
                    }

                    Set<String> codeSet = new HashSet<>();//对数据去查
                    if (hashMapList != null && !hashMapList.isEmpty()) {
                        hashMapList.forEach(v -> {
                            String parentdeptCode = v.get("parentId").toString();
                            String deptCode = v.get("id").toString();
                            codeSet.add(parentdeptCode);
                            codeSet.add(deptCode);
                        });
                        this.insertDeptCodeList(codeSet);
                    }
                    List<AdminDept> list = new ArrayList<>();
                    hashMapList.forEach(v->{//映射实体类
                        AdminDept adminDept = new AdminDept();
                        adminDept.setParentdept(v.get("parentId").toString());
                        adminDept.setOwnerUserName(v.get("userName").toString());
                        adminDept.setCode(v.get("id").toString());
                        adminDept.setName(v.get("groupName").toString());
                        adminDept.setPid(maps.get(v.get("parentId").toString()).getDeptId());
                        list.add(adminDept);
                    });
                    if (list == null || list.size() == 0) {
                        return true;
                    }
                    this.getBaseMapper().saveOrUpdateAdminDeptSyncErp(list);
                    return true;
                }

            } else {
                log.error("查询数据失败!日期:"+formatDate);
            }
        } catch (Exception e) {
            log.error("同步数据失败!日期:"+formatDate);
        }

 

 

 

 

 


标签:教程,Http,get,jsonObject,formData,接口,toString,put,new
From: https://www.cnblogs.com/onlyzhangmeng/p/17448484.html

相关文章

  • BMCOIN: 清单和工艺路线接口
      导入BOM出错。运行“清单和工艺路线接口”请求。路径:BOM>>清单和工艺路线接口。解决方式:Updateinv.mtl_system_items_bSetreplenish_to_order_flag=‘Y’–按订单装配WHEREINVENTORY_ITEM_ID=2054193 --料号#150305130013AM*2054192ANDORGAINIZATION_ID=......
  • 超级加解密转换工具——todo,编解码 md5 sha解密可以到https://www.cmd5.com/ 注意有sa
    超级加解密转换工具V2.1绿色免费版       超级加解密转换工具可以说一款万能加密解密转换工具,支持75种方式多种转换,火星最强软件!MD5、16位MD5、MD4、拼音、大小写转换、简繁转换、GBK《-》Big5、GBK简体《-》Big5、GBK《-》SJIS、火星文转换、数字到大写金额、迅雷Thunder......
  • vue+element项目中统一处理接口异常,只提示一次异常信息
     有时候一个页面会同时调多个接口,但是多个接口异常,需要做提示,那么提示的时候会弹出很多的提示信息,这无疑让体验感降低很多。 所以针对这种情况,我们配合elementUI统一做一个异常状态的处理,只能显示一次提示的功能,后续代码调接口的时候也可以省略去写异常状态下的逻辑了。首先......
  • HTTP代理出现503错误是什么意思
    HTTP代理出现503错误是指代理服务器无法完成请求,所以无法响应客户端的请求。HTTP协议规定,当服务器无法处理请求时,应该返回一个状态码来给予客户端提示,503就是其中之一。通常情况下,这是由于以下原因导致的:1.代理服务器忙碌:当代理服务器在处理过多的请求时,可能会变得繁忙。此......
  • HTTP代理IP错误代码403什么意思
    我们在使用HTTP代理的时候,经常会出现各种错误代码,其中错误代码403尤为突出。那么错误代码403出现的原因是什么呢?应该如何解决呢?让我们来学习一下吧。1.访问被拒绝HTTP代理服务器通常会限制对某些资源的访问权限,如果客户端试图访问受限资源,则代理服务器会返回403错误。......
  • HTTP代理IP错误代码400什么意思
    HTTP代理服务器是一种用于代理客户端请求的服务器,在转发用户请求时可能会出现各种错误。其中,400错误是常见的错误之一。当HTTP代理服务器收到一个不正确的请求时,它会返回一个400错误响应。本文将为您解释HTTP代理IP错误代码400的含义以及如何解决这个问题。1.IP地址无效......
  • Git分支教程:详解分支创建、合并、删除等操作
    Git是一种强大的分布式版本控制系统,它的分支功能使得团队协作和代码管理变得更加灵活和高效。分支可以让开发人员在不影响主线开发的情况下进行并行开发和实验性工作。本篇博客将详解Git分支的创建、合并、删除等操作,帮助你更好地理解和使用Git的分支功能。分支的基本概念在开......
  • 解决fatal: unable to access ‘https://github.com……‘: Failed to connect to
    问题:gitclone时会报如下错误 解决办法:1.在cmd下执行 ipconfig/flushdns,清理DNS缓存 2.重新执行gitclonehttps://github.com/.../.git即可成功......
  • 网络调试助手下载,网络调试助手教程
    网络调试助手下载,网络调试助手教程1.打开网络调试助手,我此处使用的版本是4.2.29,各个版本其实使用方法大同小异。 2.用该软件建立一个TCP服务器,在协议类型处选择TCPServer协议,本机IP地址一般会默认自动填入本机IP,若有多个IP也可以自己修改,端口号设置成小于65536的一个没有使......
  • [SprigMVC/SpringBoot] JSON序列化专题之日期序列化问题:接口报Jackson框架错误“Inva
    0序言今日工作中遇到的一个bug。各位看官且听我娓娓道来。1问题描述请求接口时,service层返回到controller层的数据结构为List<Map<Strig,Object>>,而Map中存在一个key=date,valuetype=java.time.LocalDate的Entry,且日志报如下错误:InvalidDefinitionException:Java8date......