Spring Boot使用httpcomponents实现http请求

news2024/11/25 13:44:18

基于org.apache.httpcomponents的httpclient实现,其它的实现方式都行。

1. pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>registerTest</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>server</module>
        <module>provider1</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.23</version>
        </dependency>
    </dependencies>

</project>

2. HttpClient实现get和post方法

package http.client;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class HttpClient {
    private String url;
    private String contentType;
    private String encoding;
    private JSONObject data;

    public HttpClient(String url, String encoding, String contentType, JSONObject data) {
        this.url = url;
        this.data = data;
        this.encoding = encoding == null ? "UTF-8" : encoding;
        this.contentType = contentType == null ? "application/json" : contentType;
    }

    public String httpGet() throws Exception {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse response = httpClient.execute(httpGet);
        if (response.getStatusLine().getStatusCode() != 200) {
            throw new Exception("调用服务端异常.");
        }
        HttpEntity res = response.getEntity();
        String resultData = EntityUtils.toString(res);
        System.out.println("从服务端返回结果: " + resultData);
        httpClient.close();
        return resultData;
    }

    public String httpPost() throws Exception {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        String json = JSONObject.toJSONString(data);
        StringEntity entity = new StringEntity(json);
        entity.setContentEncoding(encoding);
        entity.setContentType(contentType);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);
        if (response.getStatusLine().getStatusCode() != 200) {
            throw new Exception("调用服务端异常.");
        }
        HttpEntity res = response.getEntity();
        String resultData = EntityUtils.toString(res);
        System.out.println("从服务端返回结果: " + resultData);
        httpClient.close();
        return resultData;
    }
}

3. 创建springboot工程,提供接口访问

package register.control;

import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import register.list.RegisterList;

@RestController
@RequestMapping("/register")
public class Register {

    @Autowired
    RegisterList registerList;

    @PostMapping("/register")
    public String register(@RequestBody JSONObject data) {
        //处理注册逻辑
        return registerList.add(data.getString("name"), data.getString("ip"));
    }

    @GetMapping("/list/{name}")
    public Object getList(@PathVariable(value = "name", required = true) String name) {
        //获取注册列表
        return registerList.getByName(name);
    }

    @GetMapping("/list/all")
    public Object getList() {
        return registerList.getAll();
    }
}

4. 创建springboot工程,实现http请求

通过ApplicationRunner 实现启动自动运行。

package common.register;

import com.alibaba.fastjson.JSONObject;
import http.client.HttpClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class Register implements ApplicationRunner {

    @Value("${model.name}")
    String name;

    @Value("${model.host}")
    String host;

    @Value("${model.port}")
    String port;

    @Value("${register.url}")
    String url;

    //发送注册消息
    @Override
    public void run(ApplicationArguments args) throws Exception {
        JSONObject data = new JSONObject() {{
            put("name", name);
            put("ip", "http://" + host + ":" + port);
        }};
        HttpClient client = new HttpClient(url, null, null, data);
        client.httpPost();
    }
}

结果:成功返回
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速实现主从表编辑,实现多个不定长从表

目录 1 前言 2 不定长表、定长表的定义 3 根据已有的电子表格制作数据库表并导入数据 3.1 订单 3.2 订单明细 3.3 客户 4 配置主从关联关系 5 继续增加一个主从关联关系 6 测试一下运行结果 7 一段代码用于实现在panel中画出字段列表面板 1 前言 实际工作中&#xff…

扑克牌检测Y8S

采用YOLOV8训练&#xff0c;得到PT模型&#xff0c;然后直接转ONNX&#xff0c;使用OPENCV的DNN&#xff0c;不需要其他依赖&#xff0c;支持C/PYTHON 扑克牌检测Y8S

数据结构(王道)——线性表的存储结构之顺序表

线性表和顺序表的关系&#xff1a; 两种实现方式&#xff1a;静态分配、动态分配 总结&#xff1a;

Win7如何合并C盘与D盘?

电脑C盘不够用&#xff0c;需要把D盘的卷删除并合并到C盘中。 整体步骤&#xff1a; 1.右击此电脑-管理-磁盘管理。 2.假如要把D盘容量合并到C盘&#xff0c;右击D盘&#xff0c;选择删除卷&#xff0c;点击“是”。此时D盘数据会被清空&#xff0c;建议先备份数据。 3.删除…

消息队列MQ入门理解

功能特性: 物联网应用 物联网设备通过微消息队列(LMQ)连接云端,双向通信,数据传输;设备数据通过消息队列(MQ)连接计算引擎,分析数据或者源数据实时高效写入到 HiTSDB / HiStore / ODPS 等。 大规模缓存同步 在商业大促活动中,如“双11”大促,各个分会场会有琳琅…

基于输出调节的一致性编队控制

参考博客&#xff1a; https://blog.csdn.net/weixin_44346182/article/details/131747082 在输出调节的基础上&#xff0c;实现了输出一致性&#xff0c;而编队控制就是没有偏移量的状态一致性&#xff0c;恰好本题的C矩阵就是系统的第一阶的状态&#xff08;位置&#xff0…

spring boot security自定义权限检查

前言 鉴权主要分为身份认证和权限控制两部分&#xff1a; 身份认证&#xff1a;检查当前用户是否合法&#xff08;比如已登录&#xff09; 权限控制&#xff1a;检查当前用户是否有访问该资源的权限 本文主要给出一个示例&#xff0c;说明如何自定义权限控制。 因为一个完整的…

增长能力模型:最大限度地发挥增长团队的潜力

作为增长领导者&#xff0c;准确评估你的组织和团队成员是一项非常重要且耗时的工作。但是如果我们计划为未来的增长领导者创造一条职业道路&#xff0c;我们就需要一个流程来为整个团队提供客观的反馈&#xff0c;这就是增长能力模型的用武之地。 增长能力模型提供了一个框架&…

argc,argv

文章目录 argc 是argument count的缩写表示传入main函数中的参数个数&#xff0c;包括这个程序本身 argv 是 argument vector的缩写表示传入main函数中的参数列表&#xff0c;其中argv[0]:程序的名字(.exe) int main(int argc, char** argv) {std::cout << "argc:…

1、环境搭建

下载visual studio,社区版基本够用了,其他版本是收费的。 下载之后安装即可。 安装完成之后要求我们选择要使用的模块。这里我们勾选如图中圈起来的模块,并选择安装。因为我这边已经安装过,所以按钮变成了“关闭” 安装完毕后,重启。 重启完成之后,打开Visual studio。…

配置JDK_IDEA

配置JDK_IDEA 1.安装JDK配置环境变量1.1.安装JDK1.2.配置JDK环境变量 2.IDEA 1.安装JDK配置环境变量 1.1.安装JDK 链接: 下载JDK 1.2.配置JDK环境变量 2.IDEA 链接: IDEA官网 自行激活

分布式运用——ELK 企业级日志分析系统

分布式运用——ELK 企业级日志分析系统 一、ELK 简介1.ELK的主要组件2.可以添加的其它组件3.为什么要使用 ELK4.完整日志系统基本特征5.ELK 的工作原理&#xff1a; 二、ELK集群部署三、ELK Elasticsearch 集群部署&#xff08;在Node1、Node2节点上操作&#xff09;1&#xff…

扩散模型学习笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言 &#xff08;注&#xff1a;高斯分布前加乘以项改变其方差&#xff09; 深入浅出扩散模型系列&#xff1a;DDPM架构图解&#xff08;模型架构篇&#x…

【C/C++】类成员进阶——类中静态成员static

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

暑假第十一天打卡

离散&#xff1a; 今天主要学的是推理&#xff0c;感觉推理定理那一大堆公式就是假设箭头前是true&#xff0c;然后将双箭头改为单箭头&#xff0c;然后由此得到对应推理规则&#xff0c;横线上是“因为”&#xff0c;横线下是所以 推理的形式结构: (p → q) ∧ q → p 科研 …

Java编译运行程序(Windows环境)

1.运行条件&#xff1a;我们已经配好环境变量&#xff0c;且在需要编译的文件的目录下打开cmd&#xff1b;还没配好环境变量的同学可以参考&#xff08;链接最上面的推荐文章链接&#xff09;&#xff1a;http://t.csdn.cn/HPWWr 2.首先需编译目标编译的Java文件&#xff0c;…

【Linux】udp服务器实现英汉互译以及远程操作

全是好玩的小功能~ 文章目录 前言一、udp服务器实现网络在线英汉互译二、udp服务器实现网络远程操作总结 前言 在上一篇文章中我们详细的讲解了udp服务器的实现步骤&#xff0c;把用到的每一个接口都进行了详细的讲解&#xff0c;而我们在上一篇只是简单的网络通信功能&#x…

Spring中必备的自定义扩展点,结合工作中的案例,你一定用得到

文章目录 简单介绍Spring流程从问题入手介绍扩展点如何在static方法中从Spring容器中获取bean对象如何在bean实例化前后做一些自定义操作如何移除&#xff0c;修改一些BeanDefination怎样用相同的线程从Spring容器中获取同一个bean对象如何在Spring容器初始化或销毁时做一些自定…

2023年软件测试方向大厂招人和面试要求趋势

当前软件测试的行业现状是什么&#xff1f;2022年后半年经常能够在知乎、小红书、抖音等互联网平台上看到有人在抱怨软件测试行业就业困难。抱怨的一个主要内容是相比2021年测试岗位数下跌&#xff0c;几个月都找不到工作。另外一个测试岗位是有限的&#xff0c;但是应聘者在变…

Python读取excle文件,插入到数据库

一、需求背景 最近项目实践过程中遇到了一个问题&#xff1a;在使用Navicat将数据导入到PostgreSQL数据库时&#xff0c;发现时间格式的字段中的时间数值发生了变化&#xff0c;导致部分数据的时间不正确&#xff0c;故数据手动导入数据库报错。为了解决这个问题&#xff0c;决…