SpringBoot 接口开发教程(httpclient客户端)

目录
  • SpringBoot接口开发
    • 服务端
    • 客户端post请求
    • get请求
  • SpringBoot之httpclient使用
    • 引入相关依赖
    • 编写相关工具类
    • 业务代码中使用

SpringBoot接口开发

服务端

@RestController
@RequestMapping("/landary")
public class landaryController {

    @RequestMapping("adduser")
    public JSONObject addUser(@RequestBody JSONObject userEntity)
    {
        System.out.println(JSONObject.toJSONString(userEntity));
        JSONObject json=new JSONObject();
        json.fluentPut("code","500").fluentPut("result",userEntity);
        return json;
    }

    @RequestMapping("showuser")
    public Object showUser()
    {
        return JSON.toJSONString("hhh");
    }
}

客户端post请求

 public static String sendSms(String uid,String title,String content){
        HttpClient httpclient = new DefaultHttpClient();

        String smsUrl="http://127.0.0.1:8088/landary/adduser";
        HttpPost httppost = new HttpPost(smsUrl);
        String strResult = "";

        try {
            JSONObject jobj = new JSONObject();
            jobj.put("uid", uid);
            jobj.put("title", title);
            jobj.put("content",content);

            System.out.println(jobj.toString());
         //   nameValuePairs.add(new BasicNameValuePair("msg", (jobj.toString())));
    /*        httppost.addHeader("Content-type", "application/json; charset=utf-8");
            httppost.setHeader("Accept", "application/json");
            httppost.setEntity(new StringEntity(jobj.toString(), Charset.forName("UTF-8")));*/

           StringEntity s = new StringEntity(jobj.toString());
            s.setContentEncoding("UTF-8");
            s.setContentType("application/json");//发送json数据需要设置contentType
            httppost.setEntity(s);
            HttpResponse response = httpclient.execute(httppost);
            if (response.getStatusLine().getStatusCode() == 200) {
					/*读返回数据*/
                String conResult = EntityUtils.toString(response
                        .getEntity());
                System.out.println(conResult);
               JSONObject sobj = new JSONObject();
               sobj = JSONObject.parseObject(conResult);
                String result = sobj.getString("result");
                String code = sobj.getString("code");
                if(code.equals("500")){
                    System.out.println(result);
                    strResult += "发送成功";
                }else{
                    strResult += "发送失败,"+code;
                }

            } else {
                String err = response.getStatusLine().getStatusCode()+"";
                strResult += "发送失败:"+err;
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return strResult;
    }

get请求

/**
     * 发送 get请求
     */
    public void get() {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            // 创建httpget.
            HttpGet httpget = new HttpGet("http://127.0.0.1:8088/landary/showuser");
            System.out.println("executing request " + httpget.getURI());
            // 执行get请求.
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 获取响应实体
                HttpEntity entity = response.getEntity();
                System.out.println("--------------------------------------");
                // 打印响应状态
                System.out.println(response.getStatusLine());
                if (entity != null) {
                    // 打印响应内容长度
                    System.out.println("Response content length: " + entity.getContentLength());
                    // 打印响应内容
                    System.out.println("Response content: " + EntityUtils.toString(entity));
                }
                System.out.println("------------------------------------");
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接,释放资源
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

SpringBoot之httpclient使用

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。而HttpClient是可以支持http相关协议的工具包

它有如下功能:

1.实现了所有的http方法(GET,POST,PUT,HEAD 等)

2.支持自动转向

3.支持 HTTPS 协议

4.支持代理服务器等

既然HttpClient使用这么广泛,则本文讲解下Spring Boot 中怎么使用HttpClient.如下:

引入相关依赖

       <!-- http所需包 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
        </dependency>
         <!-- /http所需包 -->
         <!-- 数据解析所需包 -->   
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>   
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.4</version>
        </dependency>
        <!-- /数据解析所需包 -->   

编写相关工具类

写个http的工具类,以便业务代码直接调用,如下:

/**
 * Http工具类
 */
public class HttpUtils {
    /**
     * 发送POST请求
     * @param url 请求url
     * @param data 请求数据
     * @return 结果
     */
    @SuppressWarnings("deprecation")
    public static String doPost(String url, String data) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(10000).setConnectTimeout(20000)
                .setConnectionRequestTimeout(10000).build();
        httpPost.setConfig(requestConfig);
        String context = StringUtils.EMPTY;
        if (!StringUtils.isEmpty(data)) {
            StringEntity body = new StringEntity(data, "utf-8");
            httpPost.setEntity(body);
        }
        // 设置回调接口接收的消息头
        httpPost.addHeader("Content-Type", "application/json");
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            context = EntityUtils.toString(entity, HTTP.UTF_8);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            try {
                response.close();
                httpPost.abort();
                httpClient.close();
            } catch (Exception e) {
                e.getStackTrace();
            }
        }
        return context;
    }
    /**
     * 解析出url参数中的键值对
     * @param url url参数
     * @return 键值对
     */
    public static Map<String, String> getRequestParam(String url) {
        Map<String, String> map = new HashMap<String, String>();
        String[] arrSplit = null;
        // 每个键值为一组
        arrSplit = url.split("[&]");
        for (String strSplit : arrSplit) {
            String[] arrSplitEqual = null;
            arrSplitEqual = strSplit.split("[=]");
            // 解析出键值
            if (arrSplitEqual.length > 1) {
                // 正确解析
                map.put(arrSplitEqual[0], arrSplitEqual[1]);
            } else {
                if (arrSplitEqual[0] != "") {
                    map.put(arrSplitEqual[0], "");
                }
            }
        }
        return map;
    }
}

业务代码中使用

业务中代码使用,拼装请求Url和请求数据,就可以调用工具类里的doPost()方法开始直接使用咯。如下:

private String getFileStorePath(String courtId, String seesionId){
        String fileStorePath = StringUtils.EMPTY;
        //请求参数
        String data = "{\"courtId\":\"" + courtId + "\",\"sessionId\":\"" + seesionId + "\"}";
        String fileServiceUrl="http://111.11.11.11:8086";
        //发送请求,获取结果
        String result = HttpUtils.doPost(fileServiceUrl + "/ms-service/voice/search", data);    
        if(StringUtils.isNotBlank(result)){
            com.alibaba.fastjson.JSONObject jsonobject = JSON.parseObject(result);
            fileStorePath = jsonobject.getString("path");
            logger.info("fileStorePath = " + fileStorePath);
        }
        return fileStorePath;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • spring boot openfeign从此和httpClient说再见详析

    前言 在微服务设计里,服务之间的调用是很正常的,通常我们使用httpClient来实现对远程资源的调用,而这种方法需要知识服务的地址,业务接口地址等,而且需要等他开发完成后你才可以去调用它,这对于集成开发来说,不是什么好事 ,产生了A业务与B业务的强依赖性,那么我们如何进行解耦呢,答案就是openfeign框架,它与是springcloudy里的一部分. 1 添加包引用 'org.springframework.cloud:spring-cloud-starter-openfeign', 注意:

  • 详解如何使用Jersey客户端请求Spring Boot(RESTFul)服务

    本文介绍了使用Jersey客户端请求Spring Boot(RESTFul)服务,分享给大家,具体如下: Jersey客户端获取Client对象实例封装: @Service("jerseyPoolingClient") public class JerseyPoolingClientFactoryBean implements FactoryBean<Client>, InitializingBean, DisposableBean{ /** * Client接口是REST

  • springboot整合httpClient代码实例

    这篇文章主要介绍了springboot整合httpClient代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建httpClientConfig配置类 @Configuration @PropertySource(value="classpath:/properties/httpClient.properties") public class HttpClientConfig { @Value("${http.ma

  • spring boot封装HttpClient的示例代码

    最近使用到了HttpClient,看了一下官方文档:HttpClient implementations are expected to be thread safe. It is recommended that the same instance of this class is reused for multiple request executions,翻译过来的意思就是:HttpClient的实现是线程安全的,可以重用相同的实例来执行多次请求.遇到这种描述的话,我们就应该想到,需要对H

  • SpringBoot 接口开发教程(httpclient客户端)

    目录 SpringBoot接口开发 服务端 客户端post请求 get请求 SpringBoot之httpclient使用 引入相关依赖 编写相关工具类 业务代码中使用 SpringBoot接口开发 服务端 @RestController @RequestMapping("/landary") public class landaryController { @RequestMapping("adduser") public JSONObject addUser(@

  • asp.net实现微信公众账号接口开发教程

    说起微信公众帐号,大家都不会陌生,使用这个平台能给网站或系统增加一个新亮点,直接进入正题吧,在使用之前一定要仔细阅读官方API文档. 使用.net实现的方法: //微信接口地址 页面代码: weixin _wx = new weixin(); string postStr = ""; if (Request.HttpMethod.ToLower() == "post") { Stream s = System.Web.HttpContext.Current.Requ

  • php支付宝在线支付接口开发教程

    1.什么是第三方支付 所谓第三方支付,就是一些和各大银行签约.并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台.在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖家货款到达. 目前提供第三方支付的机构很多,常见的有支付宝.财付通.快钱.网银在线.易宝支付.云网等各大支付平台.网站如果需要实现第三方支付首先应该向第三方支付平台申请一个账号并签署协议,协议生效后第三方支付平台将为其开通在线支付功能,通过程序将接口集成到网站中. 为什么要使用第

  • SpringBoot可视化接口开发工具magic-api的简单使用教程

    目录 magic-api简介 使用 在SpringBoot中使用 增删改查 参数验证 结果转换 使用事务 集成Swagger 总结 参考资料 magic-api简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller.Service.Dao.Mapper.XML.VO等Java对象. 使用 下面我们来波实战,熟悉下使用magic-api来开发API接口. 在SpringBoot中使用 m

  • SpringBoot使用Mybatis注解实现分页动态sql开发教程

    目录 一.环境配置 二.Mybatis注解 三.方法参数读取 1.普通参数读取 2.对象参数读取 四.分页插件的使用 五.动态标签 六.完整示例 一.环境配置 1.引入mybatis依赖 compile( //SpringMVC 'org.springframework.boot:spring-boot-starter-web', "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.3", //Mybatis依赖及分页

  • php版微信公众平台接口开发之智能回复开发教程

    本文实例讲述了php版微信公众平台接口开发之智能回复功能实现方法.分享给大家供大家参考,具体如下: 智能回复是根据用户输入的条件来反馈结果用用户了,这个小编以前有做过信整理了一些例子供各位参考,比较完整主要是介绍在开发端了. 微信自推出后,着实火了一把,而支付功能的推出,又把微信推到了一个无可比拟的高度,然后申请微信订阅号或者服务号的人也开始比肩接踵.下面我将给大家简单讲解下微信公众平台开发接口. 先去 微信公众平台 申请账号,然后按照提示一步步.在选择订阅号和服务号上,个人只能申请订阅号,而且

  • php版银联支付接口开发简明教程

    本文实例讲述了php版银联支付接口开发的方法.分享给大家供大家参考,具体如下: 支付接口现在有第三方的支付接口也有银行的支付接口.这里就来介绍php版本银联支付接口开发的方法. 银联支付,首先要注意二重要的部分: PHP运行环境是5.4.18以上 开了扩展openssl 开发手册上面的列子只做参考,因为基本都是错的.你可以试着去官网下一个demo...注意现在银联开发,没有测试密钥提供,只能在正式环境开发 下面是我用ThinkPHP编写的一个支付类 /** * 银联支付 v0.1 * @auth

  • Java后台接口开发初步实战教程

    上图是查询列表的接口,get方式 上图是用户注册的接口,同样是get,post方式也很简单 开发工具:IntelliJ IDEA 2016.3.5 ORM框架:MyBatis 数据库:MySql 服务器:tomcat7.0 公司使用的的orm框架是Hibernate,使用起来感觉比mybatis好用多了,毕竟经过了公司这么多项目的考验,总比自己用mybatis写的项目可靠,但以下分享的还是mybatis的代码 注册接口方法:http://192.168.1.116:8080/register?u

  • Springboot整合MongoDB的Docker开发教程全解

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. 2 把Springboot打包成Docker镜像 Springboot的Web开发非常简单,本次使用之前讲解过的Springboot整合MongoDB的项目,请参考 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式,文章中有源码:MongoDB的安装请参考:用Docker安装

  • SpringBoot项目实现短信发送接口开发的实践

    一. 短信接口实现 描述:请求第三方短信接口平台(而第三方短信平台的接口请求是webservice方式实现的),此时我们要测试接口是否通,要用的工具SoapUI测试工具, 不能用PostMan,即使用post组装完参数请求该短信平台接口也不会通的(请求之前要ping通IP,只有在同一网段才可请求.或者使用VPN远程连接也可请求),接口通了之后.开始裸代码.代码使用IDEA工具去完成 , 实现逻辑根据需求而定. 首先导入两个依赖 <!--生成短信代码webservice START--> <

随机推荐