java后端对接外部系统(HttpClient HttpPost)

这篇具有很好参考价值的文章主要介绍了java后端对接外部系统(HttpClient HttpPost)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近遇到一个需求对接外部系统,我们自己的系统发送请求,根据请求内容的不同调用不同的外部系统。举例:我们是做互联网医院的,根据医生开处方选择药店的不同,调用各药店自己的系统,返回结果

文章对你的收货

  1. 可以学到对接外部系统的一些设计
  2. 构造需要的json
  3. java项目中HTTPPost请求外部系统或者调用url数据的三种格式
  4. 文章中的工具类代码可以直接复用

对接步骤

一般外部系统对接,都会给一份对接文档里面有接口url和请求数据以及返回结果的示例

1.先拿postman测试外部接口通不通(如图:外部系统文档中url和body)

 

 

2.postman测通以后,项目中编写请求代码,并测试

3.把外部系统的返回结果,格式化成本系统的结果集

设计思路

低耦合:本系统的类和外部系统分开,如果业务发生变化,只需修改中间类的实现就可以了。

构造json

json构造对应格式

步骤:类转换json字符串 ,json字符串在转换成Json对象
类转换json过程中,类中属性名定义的什么名称,转换完json对应的key就是什么

前置类

@Data
public class School {
    private String name;
    private String address;
    private List<Teacher> teacherList;
}
@Data
public class Teacher {
    private String name;
    private Integer age;
    private String phone;

    public Teacher(String name, Integer age, String phone) {
        this.name = name;
        this.age = age;
        this.phone = phone;
    }
}

只绑定类的属性 

java后端发送post请求,postman,测试工具

    /**
     * json构造:只绑定类的属性
     */
    @Test
    public void test2(){
        Teacher teacher=new Teacher("张三",28,"1827777888");
     String jsonStr = JSONObject.toJSONString(teacher);
     JSONObject jsonObjectEntity = JSONObject.parseObject(jsonStr);

     JSONObject jsonObject=new JSONObject();
     jsonObject.put("record",jsonObjectEntity);
        System.out.println(jsonObject.toString());
        //{"record":{"phone":"18279997252","name":"张三","age":28}}
    }

 json 构造成数组list格式

java后端发送post请求,postman,测试工具

 

    /**
     * json构造:构造list
     */
    @Test
    public void test3(){
        List<Teacher> list=new ArrayList<>();
        Teacher teacher=new Teacher("张三",28,"1827777888");
        Teacher teacher2=new Teacher("李四",22,"18211112222");
        list.add(teacher);list.add(teacher2);
        String jsonStr = JSONObject.toJSONString(list);
        JSONArray objects = JSONArray.parseArray(jsonStr);

        JSONObject jsonObject=new JSONObject();
        jsonObject.put("recordList",objects);
        System.out.println(jsonObject.toString());
        //{"recordList":[{"phone":"1827777888","name":"张三","age":28},{"phone":"18211112222","name":"李四","age":22}]}

    }

java后端发送post请求,postman,测试工具 

    /**
     * json构造:类中包含list
     */
    @Test
    public void test4(){
        School school=new School();
        school.setName("清华大学");
        school.setAddress("北京海淀");
        List<Teacher> list=new ArrayList<>();
        Teacher teacher=new Teacher("张三",28,"1827777888");
        Teacher teacher2=new Teacher("李四",22,"18211112222");
        list.add(teacher);list.add(teacher2);
        school.setTeacherList(list);

        String jsonStr = JSONObject.toJSONString(school);
        JSONObject jsonObjectSchool = JSONObject.parseObject(jsonStr);

        JSONObject jsonObject=new JSONObject();
        jsonObject.put("record",jsonObjectSchool);
        System.out.println(jsonObject.toString());
        //{"record":{"address":"北京海淀","name":"清华大学","teacherList":[{"phone":"1827777888","name":"张三","age":28},{"phone":"18211112222","name":"李四","age":22}]}}
    }

 list类中包含list

java后端发送post请求,postman,测试工具

    /**
     * json构造:list类中包含list
     */
    @Test
    public void test5(){
        School school=new School();
        school.setName("清华大学");
        school.setAddress("北京海淀");
        List<Teacher> list=new ArrayList<>();
        Teacher teacher=new Teacher("张三",28,"1827777888");
        Teacher teacher2=new Teacher("李四",22,"18211112222");
        list.add(teacher);list.add(teacher2);
        school.setTeacherList(list);

        School school2=new School();
        school2.setName("北京大学");
        school2.setAddress("北京海淀");
        List<Teacher> list2=new ArrayList<>();
        Teacher teacher3=new Teacher("王五",33,"1827777888");
        Teacher teacher4=new Teacher("刘六",40,"18211112222");
        list2.add(teacher3);list2.add(teacher4);
        school2.setTeacherList(list2);
        List<School> listSchool=new ArrayList<>();
        listSchool.add(school);listSchool.add(school2);

        String jsonString = JSONObject.toJSONString(listSchool);
        JSONArray objects = JSONArray.parseArray(jsonString);
        JSONObject jsonObjectReult=new JSONObject();
        jsonObjectReult.put("schooleList",objects);
        System.out.println(jsonObjectReult.toString());
       //{"schooleList":[{"address":"北京海淀","name":"清华大学","teacherList":[{"phone":"1827777888","name":"张三","age":28},{"phone":"18211112222","name":"李四","age":22}]},{"address":"北京海淀","name":"北京大学","teacherList":[{"phone":"1827777888","name":"王五","age":33},{"phone":"18211112222","name":"刘六","age":40}]}]}
    }

 

//会吧实体类中为空的部分忽略掉
String jsonString = JSONObject.toJSONString(实体类);
//{"address":"北京市海淀区北坞嘉园","age":"18","datesjc":1641560533162,"name":"测试名称","sex":"男"}


//不忽略为空部分,完整转换
String jsonString2 = JSONObject.toJSONString(实体类,  SerializerFeature.WriteMapNullValue);
//{"address":"北京市海淀区北坞嘉园","age":"18","datesjc":1641560628074,"money":null,"name":"测试名称","note_seq":null,"salary":null,"sex":"男","userCourses":null}

 HttpPost请求数据的三种格式

 外部系统的请求格式有四种:

  1. 第一种get请求
  2. 第二种post请求 json格式的
  3. 第三种post请求 form-data表单格式
  4. 第四种post请求 x-www-form-urlencoded格式

依赖

 <!--  httpclient请求依赖 -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.7</version>
    </dependency>
            <!-- 阿里JSON解析器 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.76</version>
    </dependency>

构造json示例

        JSONObject jsonObject =new JSONObject();
        String hisPrescriptionInifoVoStr = JSONObject.toJSONString(hisPrescriptionInifoVo);
        JSONObject hisPrescriptionInifoVoJson = JSONObject.parseObject(hisPrescriptionInifoVoStr);
        jsonObject.put("record",hisPrescriptionInifoVoJson);

        String conditionListStr = JSONObject.toJSONString(conditionList);
        JSONArray conditionListJsonArray = JSONObject.parseArray(conditionListStr);
        jsonObject.put("conditionList",conditionListJsonArray);

        String paymentVoListStr = JSONObject.toJSONString(paymentVoList);
        JSONArray paymentVoListJsonArray = JSONObject.parseArray(paymentVoListStr);
        jsonObject.put("paymentList",paymentVoListJsonArray);

正常的post请求json数据格式(如图)

java后端发送post请求,postman,测试工具

    //请求内容转换为 json数据字符串 (构造json字符串看上面示例)
        String body= jsonObject.toString();
        //创建一个http连接
        CloseableHttpClient client = HttpClients.createDefault();
        //创建Httppost请求
        HttpPost httpPost = new HttpPost("http://175.33.10/hisApi/saveRecipeRecord?apiId=hh4444");
        //添加头部
        httpPost.addHeader("Content-Type", "application/json");
        //请求内容格式化
        httpPost.setEntity(new StringEntity(body, "utf-8"));
        //结果返回response
        CloseableHttpResponse response = null;
        //请求流返回内容读取
        BufferedReader reader = null;
        //返回值格式化
        StringBuffer responseString = null;
        try {
            //发起请求
            response = client.execute(httpPost);
            //判断识别码200说明请求连接成功
            if (response.getStatusLine().getStatusCode() == 200) {
                reader = new BufferedReader(new InputStreamReader(
                        response.getEntity().getContent()));
                String inputLine;
                responseString = new StringBuffer();
                while ((inputLine = reader.readLine()) != null) {
                    responseString.append(inputLine);
                }
            }
        } catch (Exception e) {
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //返回结果转换为字符串
        String reultStr = responseString.toString();
        //返回结果转换为json对象
        JSONObject jsonObjectData = JSONObject.parseObject(reultStr);
        //返回值判断根据接口文档判断按个值是成功的标志 ,再用本系统结果集包装类R包装返回值给本系统用
        if(jsonObjectData.getString("success").contains("1")){
            return  R.ok();
        }else{
            return R.error(responseString.toString());
        }


 java后端发送post请求,postman,测试工具

代码请求思路: 这种表单格式的,把 表单的值都放到 url连接中,代码示例如下: 

    //请求内容转换为 json数据字符串 (构造json字符串看上面示例)
        String body= jsonObject.toString();
         //因为body有中文所以要 设置utf-8
        String encode = URLEncoder.encode(body, "UTF-8");
        CloseableHttpClient client = HttpClients.createDefault();
        String tou="?client=4b9d92e8078967ae7069919793c45131&format=json&nonce=5&timestamp=1153463&signature=woith234jhsehhsdf&notes="+encode;
        HttpPost httpPost = new HttpPost("http://yyf.woxu.com:6566/order/import-template/upload-prescription"+tou);
        httpPost.addHeader("Content-Type", "application/json");
        //结果返回response
        CloseableHttpResponse response = null;
        //请求流返回内容读取
        BufferedReader reader = null;
        //返回值格式化
        StringBuffer responseString = null;
        try {
            //发起请求
            response = client.execute(httpPost);
            //判断识别码200说明请求连接成功
            if (response.getStatusLine().getStatusCode() == 200) {
                reader = new BufferedReader(new InputStreamReader(
                        response.getEntity().getContent()));
                String inputLine;
                responseString = new StringBuffer();
                while ((inputLine = reader.readLine()) != null) {
                    responseString.append(inputLine);
                }
            }
        } catch (Exception e) {
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //返回结果转换为字符串
        String reultStr = responseString.toString();
        //返回结果转换为json对象
        JSONObject jsonObjectData = JSONObject.parseObject(reultStr);
        //返回值判断根据接口文档判断按个值是成功的标志 ,再用本系统结果集包装类R包装返回值给本系统用
        if(jsonObjectData.getString("success").contains("1")){
            return  R.ok();
        }else{
            return R.error(responseString.toString());
        }

java后端发送post请求,postman,测试工具

java后端发送post请求,postman,测试工具 

    //请求内容转换为 json数据字符串 (构造json字符串看上面示例)
        String body= jsonObject.toString();
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(“url地址”);
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
        //============== 改造成 x-www-form-urlencoded 请求格式
       SortedMap<String,String> sortedMap = null ;
        sortedMap = new TreeMap<String,String>() ;   //通过子类实例化接口对象
        sortedMap.put("jsondhy", body);//body绑定到map上 key为jsondhy就是外部系统要求的key
        //遍历map的值
        List<NameValuePair> params = new ArrayList<>();
         if (!sortedMap.isEmpty()) {
            Set<Map.Entry<String, String>> entries = sortedMap.entrySet();
            for (Map.Entry<String, String> parameter : entries) {
                BasicNameValuePair basicNameValuePair = new BasicNameValuePair(parameter.getKey(), parameter.getValue());
                params.add(basicNameValuePair);
            }
        }
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

//结果返回response
        CloseableHttpResponse response = null;
        //请求流返回内容读取
        BufferedReader reader = null;
        //返回值格式化
        StringBuffer responseString = null;
        try {
            //发起请求
            response = client.execute(httpPost);
            //判断识别码200说明请求连接成功
            if (response.getStatusLine().getStatusCode() == 200) {
                reader = new BufferedReader(new InputStreamReader(
                        response.getEntity().getContent()));
                String inputLine;
                responseString = new StringBuffer();
                while ((inputLine = reader.readLine()) != null) {
                    responseString.append(inputLine);
                }
            }
        } catch (Exception e) {
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //返回结果转换为字符串
        String reultStr = responseString.toString();
        //返回结果转换为json对象
        JSONObject jsonObjectData = JSONObject.parseObject(reultStr);
        //返回值判断根据接口文档判断按个值是成功的标志 ,再用本系统结果集包装类R包装返回值给本系统用
        if(jsonObjectData.getString("success").contains("1")){
            return  R.ok();
        }else{
            return R.error(responseString.toString());
        }

 

get请求

get请求简单 把httppost换成httpget就可以了
HttpGet httpGet = new HttpGet(uri地址以及参数);文章来源地址https://www.toymoban.com/news/detail-619202.html

到了这里,关于java后端对接外部系统(HttpClient HttpPost)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java对接百度文心一言,Java发送POST请求,类似前端AJAX

    这是项目中使用的对接百度文心一言后端代码

    2024年02月15日
    浏览(30)
  • HttpClient 发送表单

    只包含最简单的代码,不包含 乱码解决、文件上传 。 可以看到没有乱码,并且都已经赋值,但是此时我们将 key 改成中文,就会变成乱码 即使上方已经将 Content-type 改成 UTF-8,但依旧乱码,因为此时只是设置了内容的值为 UTF-8,需要设置字段值也改成 UTF-8 设置字段模式为

    2024年02月08日
    浏览(35)
  • 通过 HttpClient 发送请求

    2024年02月12日
    浏览(37)
  • Java+Demo对接中国移动 云MAS短信发送(http协议详解,新测成功!)

    一.登录官网,下载http接入文档(随着官网不断更新,可参考官网的文档) 官网地址为:云mas业务平台  进入云MAS管理平台,找到 管理-接口管理 的列表页。 (必读:本文对接方式是 java引用jar包,进行sdk协议对接,后台java代码是引用jar包,调用短信服务的http接口,所以你创

    2024年02月09日
    浏览(34)
  • Java发送WebService请求并解析数据(与大华DSS 7016s2设备对接为例)

    最近项目需要与大华的监控设备做对接,需要使用WebService发送请求,并解析数据刷入数据库,总结了一套我认为好理解的方案: 首先了解一下WebService,跨语言,跨平台的远程调用技术。一共有三种,一般是采用的http、soap协议 。 我举例的这种就是基于soap协议的,我简单的理解就是

    2024年02月13日
    浏览(28)
  • httpclient发送Get请求和Post请求

    1). 创建HttpClient对象,可以使用 HttpClients.createDefault() ; 2). 如果是无参数的GET请求,则直接使用构造方法 HttpGet(String url )创建HttpGet对象即可; 3)如果是带参数GET请求,则可以先使用 URIBuilder (String url)创建对象,再调用 addParameter (Stringparam, String value)`, 或setParameter(String param

    2024年02月06日
    浏览(48)
  • C#中通过HttpClient发送Post请求

    C#中HttpClient进行各种类型的传输 我们可以看到, 尽管PostAsync有四个重载函数, 但是接受的都是HttpContent, 而查看源码可以看到, HttpContent是一个抽象类 那我们就不可能直接创建HttpContent的实例, 而需要去找他的实现类, 经过一番研究, 发现了, 如下四个: MultipartFormDataContent、FormUrl

    2024年02月02日
    浏览(38)
  • java后端使用websocket实现与客户端之间接收及发送消息

    客户端请求websocket接口,连接通道=》我这边业务成功客户端发消息=》客户端自动刷新。 接口:ws://localhost:8080/websocket/xx 经测试,成功 如果是线上服务器连接,则需要在nginx里配置websocket相关内容,再重启nginx,代码如下 本地连接的时候用的是ws://,因为是http链接,但是如果是

    2024年02月16日
    浏览(31)
  • Spring Security对接OIDC(OAuth2)外部认证

    前后端分离项目对接OIDC(OAuth2)外部认证,认证服务器可以使用Keycloak。 后端已有用户管理和权限管理,需要外部认证服务器的用户名和业务系统的用户名一致才可以登录。 后台基于Spring Boot 2.7 + Spring Security 流程: 前台浏览器跳转到  后台地址 + /login/oauth2/authorization/my-oid

    2024年02月21日
    浏览(33)
  • 小程序后端对接腾讯有数

    腾讯生态品牌商家小程序经营分析与数据资产管理平台 有数官方文档 小程序新增授权 | 技术文档 小程序订单,创单成功后,订单信息同步到腾讯有数(时效五分钟) 小程序订单状态更改(已支付取消,未支付取消,支付完成、发货、订单完成),需同步到腾讯有数 每天

    2024年03月13日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包