Java对接快递100实时快递单号查询API接口

目录

1.引入依赖

2.定义配置信息

3.模块结构

4.Controller

5.Service实现类

6.返回数据dto以及dto中的数据dto

7.测试运行


今天也是接到了这个任务,官网有小demo,可以下载下来参考test中代码

官方文档地址:

实时快递查询接口技术文档-快递100API开放平台

1.引入依赖

        <!--快递100--><dependency><groupId>com.github.kuaidi100-api</groupId><artifactId>sdk</artifactId><version>1.0.11</version></dependency>

2.定义配置信息

这个要到官网申请 注册-快递100API开放平台|快递接口免费申请

#快递100配置信息
kuaidi100:key: *******customer: **********

3.模块结构

具体用到这些类,官方demo里有的我就不展示了

4.Controller

package cn.homed.shop.express100.web;import cn.homed.common.entity.MsgBean;
import cn.homed.shop.express100.service.Express100Service;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/dim/express100/")
@Tag(name ="快递100", description = "v-1.3 -- 快递100")
public class Express100Controller {@Autowiredprivate Express100Service express100Service;@Operation(summary = "根据快递单号查询物流信息",description = "根据快递单号查询物流信息")@RequestMapping(value = "/findOrder", method = RequestMethod.GET)public MsgBean findOrder(@RequestParam(value = "orderId", required = true) String orderId,@RequestParam(value = "tplCode", required = true) String tplCode) {return express100Service.findOrder(orderId,tplCode);}}

5.Service实现类

package cn.homed.shop.express100.service.impl;import cn.homed.common.entity.MsgBean;
import cn.homed.shop.express100.dto.Express100DTO;
import cn.homed.shop.express100.service.Express100Service;
import cn.homed.shop.express100.utils.SignUtils;
import com.google.gson.Gson;
import com.kuaidi100.sdk.api.QueryTrack;
import com.kuaidi100.sdk.core.IBaseClient;
import com.kuaidi100.sdk.pojo.HttpResult;
import com.kuaidi100.sdk.request.QueryTrackParam;
import com.kuaidi100.sdk.request.QueryTrackReq;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;/*** 快递100* @author yang* @version 1.0.0*/@Service
public class Express100ServiceImpl implements Express100Service {@Value("${kuaidi100.key}")private String key;@Value("${kuaidi100.customer}")private String customer;@Overridepublic MsgBean findOrder(String orderId,String tplCode) {Express100DTO response = null;try {QueryTrackReq queryTrackReq = new QueryTrackReq();QueryTrackParam queryTrackParam = new QueryTrackParam();queryTrackParam.setCom(tplCode);queryTrackParam.setNum(orderId);String param = new Gson().toJson(queryTrackParam);queryTrackReq.setParam(param);queryTrackReq.setCustomer(customer);queryTrackReq.setSign(SignUtils.querySign(param ,key,customer));IBaseClient baseClient = new QueryTrack();HttpResult execute = baseClient.execute(queryTrackReq);// 对返回的数据进行反序列化处理Gson gson = new Gson();String responseBody = execute.getBody();response = gson.fromJson(responseBody, Express100DTO.class);} catch (Exception e) {e.printStackTrace();}assert response != null;return MsgBean.success(response.getData(),"查询物流信息成功");}}

6.返回数据dto以及dto中的数据dto

用于反序列化

package cn.homed.shop.express100.dto;import lombok.Data;
import lombok.ToString;
import java.util.List;/*** 快递100DTO*/@Data
@ToString
public class Express100DTO {private String message;private String nu;private String ischeck;private String com;private String status;private List<LogisticsInfoDTO> data;}
package cn.homed.shop.express100.dto;import lombok.Data;
import lombok.ToString;/*** 快递100DTO*/@Data
@ToString
public class LogisticsInfoDTO {private String time;private String ftime;private String context;}

7.测试运行

可以看到也是查询到了数据

这里传快递单号可以参考contant包下的CompanyConstant

点个赞再走吧~ 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker的网络配置

文章目录 1、网络模式1.1、bridge模式(默认模式)1.2、host模式 2、bridge模式3、自定义网络 1、网络模式 Docker在创建容器时有四种网络模式&#xff1a;bridge/host/container/none&#xff0c;bridge为默认不需要用–net去指定&#xff0c;其他三种模式需要在创建容器时使用…

【QT】创建第一个QT程序

下面的前7个可以先不看&#xff0c;直接从8开始看 1. 创建Qt程序 一个Qt程序的组成部分&#xff1a;应用程序类&#xff0c;窗口类应用程序类个数&#xff1a;有且只有一个QApplication a;如何查看类对应的模块&#xff1a;光标移动到类上&#xff0c;F1qmake模块的名字 2. …

【易经】-- 伏羲八卦次序图

1、伏羲八卦次序图 ☷☶☵☴☳☲☱☰八卦坤艮坎巽震离兑乾四象太阴少阳少阴太阳两仪阴阳太极太极 2、八“单卦”&#xff08;经卦&#xff09; 符号卦名自然象征1☰乾qin天2☱兑du泽3☲离l火4☳震zhn雷5☴巽xn风6☵坎kǎn水7☶艮gn山8☷坤kūn地 3、八卦及所代表的意像

二,几何相交----2,区间相交检测IID

一&#xff0c;算法 对于空间的线段是否相交&#xff0c;假设都是与x平行&#xff0c;则需要三步 1&#xff0c;对各线段左右端点设置为L,R标志 2&#xff0c;从小到大进行排序 3&#xff0c;线性扫描&#xff0c;从小到大&#xff0c;根据模式判断是否相交&#xff0c;假设不相…

⭐每天一道leetcode:27.移除元素(简单;vector)

⭐今日份题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中…

录屏、截屏好工具

踩过的坑&#xff1a;用了win11之后&#xff0c;截屏工具就无法安装了&#xff0c;还有sqlcompare也无法安装了。 解决&#xff1a;关闭系统自带的安全机制“实时保护”&#xff0c;再重新安装工具。

shell脚本 条件语句

一、条件语句 1. test测试 test 测试文件的表达式 是否成立 格式1&#xff1a;test 条件表达式 格式2&#xff1a;[ 条件表达式 ] 注意[]空格&#xff0c;否则会失败 操作符&#xff1a; -d&#xff1a;测试是否为目录&#xff08;Directory&#xff09; -e&#xff1a;测…

3分钟开通GPT-4

AI从前年12月份到现在已经伴随我们一年多了&#xff0c;还有很多小伙伴不会开通&#xff0c;其实开通很简单&#xff0c;环境需要自己搞定&#xff0c;升级的话就需要一张visa卡&#xff0c;办理visa卡就可以直接升级chatgptPLSU 一、虚拟卡支付 这种方式的优点是操作简单&…

直播预告|从一张 CD 说起,关于播放器的前世今生

1877 年&#xff0c;天才发明家爱迪生研发出了人类历史上第一台可以录音和放音的装置&#xff0c;被称为“话筒”。 当时&#xff0c;这台机器使用一张薄薄的铁箔盘来录制声音&#xff0c;爱迪生亲手转动铁箔盘&#xff0c;在上面刻下声音的波纹。不过这个设计并不太实用&…

Swing程序设计(11)动作事件监听器,焦点事件监听器

文章目录 前言一、事件监听器是什么&#xff1f;二、详细展开 1.动作事件监听器2.焦点事件监听器总结 前言 如果你是坚持从Swing程序第一篇看到了这里&#xff0c;恭喜你&#xff0c;Swing程序设计简单地落下了帷幕&#xff0c;关于Swing程序更深的了解&#xff0c;可以自行学习…

《花书》学习:LeNet

# LeNet网络架构 正常的应该是&#xff1a;输入→操作→输出 但都简化 要么省略 操作 要么省略 输出 # LeNet第一个卷积层详解

(学习日记)2024.03.04:UCOSIII第六节:main函数+前六节总结

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…