springboot封装查询快递物流
目录
- 一、ApiClient代码解读
- 二、ApiService代码解读
- 三、HomeController代码解读
- 四、整体代码
- 五、结果展示
一、ApiClient代码解读
这是一个简单的Spring Boot的RestTemplate
客户端,用于执行HTTP请求。
首先,这个类被@Component
注解标记,这意味着它是一个Spring组件,Spring的依赖注入框架会自动创建并管理这个类的实例。
类声明
public class ApiClient {
成员变量
private final RestTemplate restTemplate;
RestTemplate是Spring提供的一个HTTP客户端,用于发送HTTP请求。
final`关键字表示这个成员变量一旦在构造函数中被赋值后,就不能再被修改。
无参构造函数
public ApiClient() {restTemplate = new RestTemplate();
}
这个无参构造函数是创建一个新的ApiClient
实例的方式。它创建一个新的RestTemplate
实例并将其赋值给restTemplate
成员变量。
公共方法
public <T> T executeRequest(String url, HttpMethod method, Class<T> responseType) {ResponseEntity<T> response = restTemplate.exchange(url, method, null, responseType);return response.getBody();
}
这个方法是执行HTTP请求的主要方法。它接受一个URL、一个HTTP方法(GET、POST、PUT等)、以及一个表示预期响应类型的类,然后使用RestTemplate
发送HTTP请求并返回响应的主体。这个方法是泛型的,所以它可以处理任意类型的响应。
在内部,RestTemplate.exchange()
方法使用给定的URL、HTTP方法、实体(在这个例子中是null,因为没有要发送的实体)、以及响应类型来发送HTTP请求。这个方法返回一个ResponseEntity
对象,该对象包含HTTP响应的状态码、头信息和主体。
然后,这个方法返回ResponseEntity.getBody()
,这是响应的主体部分。因为executeRequest()
方法是泛型的,所以返回的主体会是正确的类型(由responseType
参数指定)。
二、ApiService代码解读
这是一个使用Spring框架的Java类,名为ApiService
。这个类用于通过API与远程服务器进行交互。
类声明
public class ApiService {
这是类的基本声明,表明这是一个公开的类,可以在其他类中继承和引用。
成员变量
private final ApiClient apiClient;
这是一个私有常量成员变量,类型为ApiClient
。这个变量是ApiService
类使用的主要工具,用于执行API请求。final
关键字表示这个变量一旦初始化就不能再改变。
构造函数
@Autowired
public ApiService(ApiClient apiClient) {this.apiClient = apiClient;
}
这是ApiService
的构造函数,它接受一个ApiClient
类型的参数。@Autowired
注解表示这个构造函数将自动被Spring框架调用,以注入一个已经初始化的ApiClient
实例。这个实例将被赋值给上面的成员变量。
公共方法
以下是两个公共方法:
getDataFromApi(String url, Class<T> responseType)
: 此方法使用GET方法从指定的URL获取数据,并根据响应类型返回结果。它通过调用ApiClient
的executeRequest
方法实现这一点。postDataToApi(String url, Object requestBody, Class<T> responseType)
: 此方法使用POST方法向指定的URL发送给定的请求体,并根据响应类型返回结果。它也通过调用ApiClient
的executeRequest
方法实现这一点。
这两个方法都是泛型的,因此可以处理任何类型的响应,这使得代码更加灵活和可重用。
总的来说,这个ApiService
类是一个用于处理API请求的封装器,它简化了对API的使用,并确保所有请求都以一致的方式处理。
三、HomeController代码解读
这是一个Spring Boot的控制器类,用于处理特定的HTTP请求。让我们详细解释一下每行代码的作用。
类声明
@RestController
这是Spring的@RestController
注解,它表明这个类将处理HTTP请求并直接返回HTTP响应,而不是通过页面渲染。
@RequestMapping("/hello")
这是@RequestMapping
注解的一个应用,它指定了处理请求时的基本URL路径。在这种情况下,所有的请求都会有一个"/hello"的前缀。
成员变量
@Autowired
private ApiService apiService;
这是Spring的@Autowired
注解,它告诉Spring自动装配这个成员变量。也就是说,Spring会查找一个名为ApiService
的bean,并将其自动赋值给这个成员变量。
方法
@GetMapping("/api")
这是@GetMapping
注解,它表示这个方法将处理GET请求,并且请求的URL需要包含"/api"。
public String callApi(@RequestParam String number) {
这是方法的签名。callApi
是方法名,接受一个参数number
,该参数通过@RequestParam
注解进行标注,表示这个参数是从HTTP请求的参数中获取的。在这种情况下,HTTP请求需要包含一个名为"number"的参数。
String url = "https://tools.mgtv100.com/external/v1/logistics/query?no="+number;
这行代码创建了一个URL字符串,该字符串将从"number"参数获取值,并附加到URL的末尾。
return apiService.getDataFromApi(url,String.class);
这行代码调用ApiService
的getDataFromApi
方法,使用上面创建的URL和String.class作为参数。该方法将发送一个GET请求到这个URL,并返回响应的主体。然后,这个主体被返回给HTTP请求。
总的来说,这个控制器类的主要功能是接收包含特定参数"number"的GET请求,然后使用这个参数构造一个URL,并通过这个URL发送一个GET请求。然后返回响应的主体。
四、整体代码
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class ApiClient {private final RestTemplate restTemplate;public ApiClient() {restTemplate = new RestTemplate();}public <T> T executeRequest(String url, HttpMethod method, Class<T> responseType) {ResponseEntity<T> response = restTemplate.exchange(url, method, null, responseType);return response.getBody();}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;@Service
public class ApiService {private final ApiClient apiClient;@Autowiredpublic ApiService(ApiClient apiClient) {this.apiClient = apiClient;}public <T> T getDataFromApi(String url, Class<T> responseType) {return apiClient.executeRequest(url, HttpMethod.GET, responseType);}public <T> T postDataToApi(String url, Object requestBody, Class<T> responseType) {return apiClient.executeRequest(url, HttpMethod.POST, responseType);}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/hello")
public class HomeController {@Autowiredprivate ApiService apiService;@GetMapping("/api")public String callApi(@RequestParam String number) {String url = "https://tools.mgtv100.com/external/v1/logistics/query?no="+number;return apiService.getDataFromApi(url,String.class);}
}
五、结果展示
相关文章:
![](https://img-blog.csdnimg.cn/7fbd73b070fa47e4960fd05226678c63.png)
springboot封装查询快递物流
目录 一、ApiClient代码解读二、ApiService代码解读三、HomeController代码解读四、整体代码五、结果展示 一、ApiClient代码解读 这是一个简单的Spring Boot的RestTemplate客户端,用于执行HTTP请求。 首先,这个类被Component注解标记,这意味…...
![](https://img-blog.csdnimg.cn/e3edf99de3d64446aa2bdfb94119d859.png)
从C语言到C++_37(特殊类设计和C++类型转换)单例模式
目录 1. 特殊类设计 1.1 不能被拷贝的类 1.2 只能在堆上创建的类 1.3 只能在栈上创建的类 1.4 不能被继承的类 1.5 只能创建一个对象的类(单例模式)(重点) 1.5.1 饿汉模式 1.5.2 懒汉模式 2. 类型转换 2.1 static_cast 2.2 reinterpret_cast 2.3 const_cast 2.4 d…...
![](https://www.ngui.cc/images/no-images.jpg)
go 使用systray 实现托盘和程序退出
1.先 go get 安装 包 go get github.com/getlantern/systray2.使用的代码 func main() {fmt.Println("开始")systray.Run(onReady, onExit) }func onReady() {systray.SetIcon(icon.Data)systray.SetTitle("Awesome App")systray.SetTooltip("Prett…...
![](https://www.ngui.cc/images/no-images.jpg)
Electron之单例+多窗口
Electron之单例多窗口 Electron 24 React 18 单例可以通过app.requestSingleInstanceLock实现,多窗口可以简单通过路由来实现 单例 const gotTheLock app.requestSingleInstanceLock(); if (!gotTheLock) {app.quit(); } else {app.on(second-instance, (event, …...
![](https://www.ngui.cc/images/no-images.jpg)
A Survey of Knowledge-Enhanced Pre-trained Language Models
本文是LLM系列的文章,针对《A Survey of Knowledge-Enhanced Pre-trained Language Models》的翻译。 知识增强的预训练语言模型综述 摘要1 引言2 背景3 KE-PLMs用于NLU4 KE-PLMs用于NLG5 未来的方向5.1 整合来自同质和异质来源的知识5.2 探索多模态知识5.3 提供可…...
![](https://www.ngui.cc/images/no-images.jpg)
动态规划(选择)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 作为队伍的核心,forever97很受另外两个队友的尊敬。 Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家forever97爱吃的外卖。 如果T…...
![](https://img-blog.csdnimg.cn/b99e588df04b498d9ab54032c4d5e931.png)
IIS WebDAV配置,https绑定及asp设置
IIS支持标准CGI,因此可以用程序语言针对STDIN和STDOUT开发。 IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 IIS支持脚本解释CGI,因此可以用脚本语言针对STDIN和STDOUT开发。 IIS perl python cbrother php脚本语言配置…...
![](https://img-blog.csdnimg.cn/img_convert/e93f089897e877a1528c3f31119e3dcb.png)
【计算机视觉项目实战】中文场景识别
✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 👨&…...
![](https://www.ngui.cc/images/no-images.jpg)
Java 中 Map 初始化的几种方法
# 传统方式 Map<String, String> map new HashMap<>(); map.put("k1", "v1"); map.put("k2", "v2");# java8新特性-双括号初始化 Map<String, String> map1 new HashMap<>() {{put("k1", "v…...
![](https://www.ngui.cc/images/no-images.jpg)
【学习方法论】学习的三种境界、三种习惯、三个要点,三个心态
学习的三种境界、三种习惯、三个要点,三个心态 三种学习境界 苦学 古人云:“头悬梁、锥刺股”,勤学苦练是第一境界。处于这种层次的同学,觉得学习枯燥无味,对他们来说学习是一种被迫行为,体会不到学习中的…...
![](https://img-blog.csdnimg.cn/a40cb2123dd44bff8c2fafa39ee8a3bf.png)
[管理与领导-67]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与公司的八字是否相合
目录 前言: 一、概述 二、八字相合的步骤 2.1 企业文化是否相合 2.2.1 企业文化对职业选择的意义 2.2.2 个人与企业三观不合的结果 2.2.3 什么样的企业文化的公司不能加入 2.2 公司的发展前景 2.3 公司所处行业发展 2.4 创始人的三观 2.5 创始人与上司的…...
![](https://img-blog.csdnimg.cn/7a80245f0b5f4021a033b3789a9efdeb.png)
【PMO项目管理】深入了解项目管理 | Stakeholder 利益相关者 | 利益相关者之间的立场差异
💭 写在前面:本文将带您深入了解项目管理的核心概念和关键要素。我们将从项目管理的基本理解开始,逐步探讨其领域、复杂性和变化的重点,以及项目管理的具体过程。我们还将研究项目的性质以及成功项目所必备的条件。在此过程中&…...
![](https://img-blog.csdnimg.cn/img_convert/b8453ddd87ab13666e11c7748005d9e8.png)
设计模式-原则篇-01.开闭原则
简介 可以把设计模式理解为一套比较成熟并且成体系的建筑图纸,经过多次编码检验目前看来使用效果还不错的软件设计方案。适用的场景也比较广泛,在使用具体的设计模式之前先要学习软件设计的基础 “软件设计原则”,后面的23个设计模式都是…...
![](https://img-blog.csdnimg.cn/1421318507a249b1a03fdc070e5729bb.png#pic_center)
JAVA毕业设计096—基于Java+Springboot+Vue的在线教育系统(源码+数据库+18000字论文)
基于JavaSpringbootVue的在线教育系统(源码数据库18000字论文)096 一、系统介绍 本系统前后端分离 本系统分为管理员、用户两种角色(管理员角色权限可自行分配) 用户功能: 注册、登录、课程预告、在线课程观看、学习资料下载、学习文章预览、个人信息管理、消息…...
![](https://img-blog.csdnimg.cn/6ac02949f08e4440a6611c80061066ca.png)
windows环境搭建ELK
目录 资源下载(8.9.1) ES安装、注册、使用 Kibana安装、注册、使用 Logstash安装、注册、使用 Filebeat安装、使用(如果只有一个数据流,则不需要使用filebeat,直接上logstash即可) 资源下载࿰…...
![](https://img-blog.csdnimg.cn/81a3417cfff74872819aa04a6842e183.png)
langchain介绍之-Prompt
LangChain 是一个基于语言模型开发应用程序的框架。它使得应用程序具备以下特点:1.数据感知:将语言模型与其他数据源连接起来。2.代理性:允许语言模型与其环境进行交互 LangChain 的主要价值在于:组件:用于处理语言模型…...
![](https://img-blog.csdnimg.cn/5be42e25197c4c62b074eab00fe6b8d6.png)
汇编语言Nasmide编辑软件
用来编写汇编语言源程序,Windows 记事本并不是一个好工具。同时,在命令行编译源程序也令很多人迷糊。毕竟,很多年轻的朋友都是用着 Windows 成长起来的,他们缺少在 DOS和 UNIX 下工作的经历。 我一直想找一个自己中意的汇编语言编…...
![](https://img-blog.csdnimg.cn/img_convert/a4a7d822a816bea6e004d94190876b53.png)
用python开发一个炸金花小游戏
众所周知扑克牌可谓是居家旅行、桌面交友的必备道具, 今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则。 炸(诈)金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏…...
![](https://img-blog.csdnimg.cn/ff7805029277461898f3d879967edbc3.png)
Uniapp中使用uQRCode二维码跳转小程序页面
下载插件 uQRCode官网地址 引入插件 文件如下 //--------------------------------------------------------------------- // github https://github.com/Sansnn/uQRCode //---------------------------------------------------------------------let uQRCode = {};(functio…...
![](https://img-blog.csdnimg.cn/9cff52f18e36493da36ea37037b17717.png)
解决husky在mac下不生效的问题
目录 一、问题 1.1 问题描述 二、解决 2.1 解决 一、问题 1.1 问题描述 本文主要解决的问题是,husky在windows上正常生肖,但放到mac下后不生效的问题! 为了确保团队中提交代码的一致性,因此使用了 husky 作为提交的检测工具…...
![](https://img-blog.csdnimg.cn/0964e1c9f8b54c658757719d080e374d.jpeg)
如何在自动化测试中使用MitmProxy获取数据返回?
背景介绍 当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。 比如: 场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全…...
![](https://img-blog.csdnimg.cn/cf90f6e5fbad471e97e31e9cff873309.png)
达之云BI平台助力中国融通集团陕西军民服务社有限公司实现数字化运营
中国融通集团陕西军民服务社是一家大型综合类零售购物中心,公司目前管理系统运行了10年左右,面临系统新零售支持发展严重滞后,行业主流应用落地困难,如线上业务、到家业务、全渠道营销、电子发票、自助收银、扫码购、无感停车、未…...
![](https://img-blog.csdnimg.cn/e7a2a814b5ff46b58e9300fd5e3083aa.png)
Private market:借助ZK实现的任意计算的trustless交易
1. 引言 Private market,借助zk-SNARKs和以太坊来 隐私且trustlessly selling: 1)以太坊地址的私钥(ECDSA keypair)2)EdDSA签名3)Groth16 proof:借助递归性来匿名交易Groth16 proo…...
![](https://img-blog.csdnimg.cn/dd06dd9890fd4bcfaa683a0bbc6abfb1.png)
反序列化漏洞复现(typecho)
文章目录 执行phpinfogetshell 执行phpinfo 将下面这段代码复制到一个php文件,命名为typecho_1.0-14.10.10_unserialize_phpinfo.php,代码中定义的类名与typecho中的类相同,是它能识别的类: <?php class Typecho_Feed{const…...
![](https://img-blog.csdnimg.cn/f129776a66754ecf83ba054d08fdb63f.png)
QT设计一个小闹钟
设置一个闹钟,左侧窗口显示当前时间,右侧设置时间,以及控制闹钟的开关,下方显示闹钟响时的提示语。当按启动按钮时,设置时间与闹钟提示语均不可再改变。当点击停止时,关闭闹钟并重新启用设置时间与闹钟提示…...
![](https://img-blog.csdnimg.cn/f9119912d49747668383b0234a3782aa.gif)
MybatisPlus(3)
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 一、查询投影🍭 查询投影是指在查询操作中,只选择…...
![](https://www.ngui.cc/images/no-images.jpg)
安全计算环境技术测评要求项
1.身份鉴别-在应用系统及各类型设备中确认操作者身份的过程(身份鉴别和数据保密) 1-2/2-3/3-4/4-4 a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 b)应具有…...
![](https://www.ngui.cc/images/no-images.jpg)
Excel快捷键表
工作表插入新工作表ShiftF11或AltShiftF1移动到工作簿中的下一张工作表CtrlPageDown移动到工作簿中的上一张工作表CtrlPageUp选定当前工作表和下一张工作表ShiftCtrlPageDown取消选定多张工作表Ctrl PageDown选定其他的工作表CtrlPageUp选定当前工作表和上一张工作表ShiftCtrlP…...
![](https://img-blog.csdnimg.cn/ee2303730c914679839e5d8bd9684f68.webp)
Windows Server 系统各版本及授权说明(附下载地址
本文为Windows Server系统各版本差异对比及授权说明。 会对相关目前仍主流使用的相关Windows Server系统版本和相关授权进行对比和功能说明。 WindowsServer2012 R2 Windows Server 2012 R2授权方式是按照物理CPU数量进行授权,比如物理服务器CPU插槽数量2ÿ…...
![](https://img-blog.csdnimg.cn/2bb9f11e7d574be89f40e818fe8b77c3.png)
【智慧工地源码】物联网和传感器技术在智慧工地的应用
物联网(IoT)和传感器技术在智慧工地中扮演着至关重要的角色。这些技术的应用,使得智慧工地能够实现对施工过程的精确监控、数据收集和分析,以及设备互联,从而提高工程效率、减少成本并改善工人的工作环境。 一、物联网…...
![](https://static.oschina.net/uploads/space/2016/1223/122823_msYQ_3152390.png)
wordpress颜色/如何注册一个域名
2019独角兽企业重金招聘Python工程师标准>>> MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的…...
![](/images/no-images.jpg)
深圳最大的企业排名/网站seo推广计划
简介PHP1.0是自研framework道路上的最初始版本,初心是为了学习和了解框架开发的方方面面,并将经历所得迁移到对其他框架的学习上去,能够更好的理解和使用已有的工具,这是终极目的。1.0 这个版本是一个相当粗糙的原型,并…...
![](https://img-blog.csdnimg.cn/74c1367c6c86405ab7c242933f51b8fd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQWJ0WWVl,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)
做 理财网站有哪些问题/网络营销推广活动有哪些
socket、网络模型笔记 Socket是什么? socket是一个文件,也是一个编程模型,本质上是一种管道文件 那么既然是一个文件,就会有文件描述符 同时也是编程接口(Stub) 客户端只有一种socket,即代表服务端的socket&#…...
![](https://img-blog.csdnimg.cn/5c84c19c4d624816ad7fb0187fb9213a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Y-o6Zmq6bKk,size_20,color_FFFFFF,t_70,g_se,x_16)
怎样优化排名自己网站/视频专用客户端app
💖SSL/TLS专栏说明💖本文的初衷是:随着数字信息时代的到来(DT), 生活中的方方面面几乎可以完全数字信息化,例如个人性别、地址、联系方式、财产、生活习惯、饮食习惯、工作情况、学历信息、健康状况、兴趣爱好等等都存储到互联网上…...
![](/images/no-images.jpg)
学网站建设维护/免费制作网站
2013年9月23日18:04:06 直接cshtml页面的js中使用 var customerId (ViewBag.Oppotunity as OppotunityDtonull?0:(ViewBag.Oppotunity as OppotunityDto).CustomerId); 这里的var 是js中的 2013年7月25日11:52:51 添加 将数组按照某个字符拼接起来 String.Join(&qu…...
![](http://bbs.itcast.cn/data/attachment/forum/201606/22/095546cl38fk7ql77qckbw.png.thumb.jpg)
做代购网站有哪些东西/阳东网站seo
一腔热血的你是否想通过自己的双手实现自己的梦想,却无从下手?彷徨迷茫的你是否感到薪水已经配不上你的能力,空有抱负,却无处施展?认真执着的你是否一直苦于自学钻研,却遇到了瓶颈,难以进步&…...