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);}
}
五、结果展示

相关文章:
springboot封装查询快递物流
目录 一、ApiClient代码解读二、ApiService代码解读三、HomeController代码解读四、整体代码五、结果展示 一、ApiClient代码解读 这是一个简单的Spring Boot的RestTemplate客户端,用于执行HTTP请求。 首先,这个类被Component注解标记,这意味…...
从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…...
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…...
Electron之单例+多窗口
Electron之单例多窗口 Electron 24 React 18 单例可以通过app.requestSingleInstanceLock实现,多窗口可以简单通过路由来实现 单例 const gotTheLock app.requestSingleInstanceLock(); if (!gotTheLock) {app.quit(); } else {app.on(second-instance, (event, …...
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 提供可…...
动态规划(选择)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 作为队伍的核心,forever97很受另外两个队友的尊敬。 Trote_w每天都要请forever97吃外卖,但很不幸的是宇宙中心forever97所在的学校周围只有3家forever97爱吃的外卖。 如果T…...
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脚本语言配置…...
【计算机视觉项目实战】中文场景识别
✨专栏介绍: 经过几个月的精心筹备,本作者推出全新系列《深入浅出OCR》专栏,对标最全OCR教程,具体章节如导图所示,将分别从OCR技术发展、方向、概念、算法、论文、数据集等各种角度展开详细介绍。 👨&…...
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…...
【学习方法论】学习的三种境界、三种习惯、三个要点,三个心态
学习的三种境界、三种习惯、三个要点,三个心态 三种学习境界 苦学 古人云:“头悬梁、锥刺股”,勤学苦练是第一境界。处于这种层次的同学,觉得学习枯燥无味,对他们来说学习是一种被迫行为,体会不到学习中的…...
[管理与领导-67]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 评估你与公司的八字是否相合
目录 前言: 一、概述 二、八字相合的步骤 2.1 企业文化是否相合 2.2.1 企业文化对职业选择的意义 2.2.2 个人与企业三观不合的结果 2.2.3 什么样的企业文化的公司不能加入 2.2 公司的发展前景 2.3 公司所处行业发展 2.4 创始人的三观 2.5 创始人与上司的…...
【PMO项目管理】深入了解项目管理 | Stakeholder 利益相关者 | 利益相关者之间的立场差异
💭 写在前面:本文将带您深入了解项目管理的核心概念和关键要素。我们将从项目管理的基本理解开始,逐步探讨其领域、复杂性和变化的重点,以及项目管理的具体过程。我们还将研究项目的性质以及成功项目所必备的条件。在此过程中&…...
设计模式-原则篇-01.开闭原则
简介 可以把设计模式理解为一套比较成熟并且成体系的建筑图纸,经过多次编码检验目前看来使用效果还不错的软件设计方案。适用的场景也比较广泛,在使用具体的设计模式之前先要学习软件设计的基础 “软件设计原则”,后面的23个设计模式都是…...
JAVA毕业设计096—基于Java+Springboot+Vue的在线教育系统(源码+数据库+18000字论文)
基于JavaSpringbootVue的在线教育系统(源码数据库18000字论文)096 一、系统介绍 本系统前后端分离 本系统分为管理员、用户两种角色(管理员角色权限可自行分配) 用户功能: 注册、登录、课程预告、在线课程观看、学习资料下载、学习文章预览、个人信息管理、消息…...
windows环境搭建ELK
目录 资源下载(8.9.1) ES安装、注册、使用 Kibana安装、注册、使用 Logstash安装、注册、使用 Filebeat安装、使用(如果只有一个数据流,则不需要使用filebeat,直接上logstash即可) 资源下载࿰…...
langchain介绍之-Prompt
LangChain 是一个基于语言模型开发应用程序的框架。它使得应用程序具备以下特点:1.数据感知:将语言模型与其他数据源连接起来。2.代理性:允许语言模型与其环境进行交互 LangChain 的主要价值在于:组件:用于处理语言模型…...
汇编语言Nasmide编辑软件
用来编写汇编语言源程序,Windows 记事本并不是一个好工具。同时,在命令行编译源程序也令很多人迷糊。毕竟,很多年轻的朋友都是用着 Windows 成长起来的,他们缺少在 DOS和 UNIX 下工作的经历。 我一直想找一个自己中意的汇编语言编…...
用python开发一个炸金花小游戏
众所周知扑克牌可谓是居家旅行、桌面交友的必备道具, 今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则。 炸(诈)金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏…...
Uniapp中使用uQRCode二维码跳转小程序页面
下载插件 uQRCode官网地址 引入插件 文件如下 //--------------------------------------------------------------------- // github https://github.com/Sansnn/uQRCode //---------------------------------------------------------------------let uQRCode = {};(functio…...
解决husky在mac下不生效的问题
目录 一、问题 1.1 问题描述 二、解决 2.1 解决 一、问题 1.1 问题描述 本文主要解决的问题是,husky在windows上正常生肖,但放到mac下后不生效的问题! 为了确保团队中提交代码的一致性,因此使用了 husky 作为提交的检测工具…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
