当前位置: 首页 > news >正文

基于 Java 的淘宝 API 调用实践:商品详情页 JSON 数据结构解析与重构

一、引言

在电商领域,淘宝拥有海量的商品数据。通过调用淘宝 API 可以获取商品详情页的 JSON 数据,这对于商家进行市场分析、竞品调研等具有重要意义。本文将详细介绍如何使用 Java 调用淘宝 API,获取商品详情页的 JSON 数据,并对其进行解析与重构。

二、前期准备

在开始之前,需要完成以下准备工作:

  1. 淘宝入驻:在淘宝平台注册账号,创建应用,获取 apiKey 和 apiSecret,这是调用淘宝 API 的必要凭证。
  2. 引入依赖库:使用 Maven 或 Gradle 引入必要的依赖库,如 HttpClient 用于发送 HTTP 请求,Jackson 用于 JSON 数据的处理。以下是 Maven 依赖示例:
<dependencies><!-- HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><!-- Jackson --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.0</version></dependency>
</dependencies>

 

三、淘宝API 调用

淘宝 API 调用需要进行签名,以确保请求的合法性。以下是 Java 实现签名和调用 API 的代码:

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;public class TaobaoApiCaller {private static final String API_URL = "http://gw.api.taobao.com/router/rest";private String appKey;private String appSecret;public TaobaoApiCaller(String appKey, String appSecret) {this.appKey = appKey;this.appSecret = appSecret;}public String callApi(Map<String, String> params) throws IOException {params.put("app_key", appKey);params.put("timestamp", new Date().toString());params.put("format", "json");params.put("v", "2.0");params.put("sign_method", "md5");String sign = generateSign(params);params.put("sign", sign);StringBuilder urlBuilder = new StringBuilder(API_URL);urlBuilder.append("?");for (Map.Entry<String, String> entry : params.entrySet()) {urlBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");}urlBuilder.deleteCharAt(urlBuilder.length() - 1);HttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(urlBuilder.toString());HttpResponse response = httpClient.execute(httpGet);return EntityUtils.toString(response.getEntity());}private String generateSign(Map<String, String> params) {List<Map.Entry<String, String>> paramList = new ArrayList<>(params.entrySet());paramList.sort(Map.Entry.comparingByKey());StringBuilder signStr = new StringBuilder(appSecret);for (Map.Entry<String, String> entry : paramList) {signStr.append(entry.getKey()).append(entry.getValue());}signStr.append(appSecret);try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] digest = md.digest(signStr.toString().getBytes());StringBuilder result = new StringBuilder();for (byte b : digest) {String hex = Integer.toHexString(b & 0xFF);if (hex.length() == 1) {result.append("0");}result.append(hex);}return result.toString().toUpperCase();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}
}

 

四、商品详情页 JSON 数据解析与重构

获取到商品详情页的 JSON 数据后,需要对其进行解析和重构。以下是一个简单的示例:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class JsonParserAndReconstructor {public static Map<String, Object> parseAndReconstruct(String json) throws IOException {ObjectMapper objectMapper = new ObjectMapper();JsonNode rootNode = objectMapper.readTree(json);Map<String, Object> reconstructedData = new HashMap<>();// 假设商品详情数据在某个特定节点下,这里需要根据实际情况修改JsonNode itemNode = rootNode.path("item_get_response").path("item");if (!itemNode.isMissingNode()) {reconstructedData.put("itemId", itemNode.path("item_id").asText());reconstructedData.put("title", itemNode.path("title").asText());reconstructedData.put("price", itemNode.path("price").asDouble());// 可以根据需要添加更多字段}return reconstructedData;}
}

 

五、完整示例代码

以下是一个完整的 Java 示例,展示如何调用淘宝 API 获取商品详情页的 JSON 数据,并对其进行解析和重构:

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;class TaobaoApiCaller {private static final String API_URL = "http://gw.api.taobao.com/router/rest";private String appKey;private String appSecret;public TaobaoApiCaller(String appKey, String appSecret) {this.appKey = appKey;this.appSecret = appSecret;}public String callApi(Map<String, String> params) throws IOException {params.put("app_key", appKey);params.put("timestamp", new Date().toString());params.put("format", "json");params.put("v", "2.0");params.put("sign_method", "md5");String sign = generateSign(params);params.put("sign", sign);StringBuilder urlBuilder = new StringBuilder(API_URL);urlBuilder.append("?");for (Map.Entry<String, String> entry : params.entrySet()) {urlBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");}urlBuilder.deleteCharAt(urlBuilder.length() - 1);HttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(urlBuilder.toString());HttpResponse response = httpClient.execute(httpGet);return EntityUtils.toString(response.getEntity());}private String generateSign(Map<String, String> params) {List<Map.Entry<String, String>> paramList = new ArrayList<>(params.entrySet());paramList.sort(Map.Entry.comparingByKey());StringBuilder signStr = new StringBuilder(appSecret);for (Map.Entry<String, String> entry : paramList) {signStr.append(entry.getKey()).append(entry.getValue());}signStr.append(appSecret);try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] digest = md.digest(signStr.toString().getBytes());StringBuilder result = new StringBuilder();for (byte b : digest) {String hex = Integer.toHexString(b & 0xFF);if (hex.length() == 1) {result.append("0");}result.append(hex);}return result.toString().toUpperCase();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}
}class JsonParserAndReconstructor {public static Map<String, Object> parseAndReconstruct(String json) throws IOException {ObjectMapper objectMapper = new ObjectMapper();JsonNode rootNode = objectMapper.readTree(json);Map<String, Object> reconstructedData = new HashMap<>();JsonNode itemNode = rootNode.path("item_get_response").path("item");if (!itemNode.isMissingNode()) {reconstructedData.put("itemId", itemNode.path("item_id").asText());reconstructedData.put("title", itemNode.path("title").asText());reconstructedData.put("price", itemNode.path("price").asDouble());}return reconstructedData;}
}public class TaobaoApiExample {public static void main(String[] args) {String appKey = "your_app_key";String appSecret = "your_app_secret";TaobaoApiCaller apiCaller = new TaobaoApiCaller(appKey, appSecret);Map<String, String> params = new HashMap<>();params.put("method", "taobao.item.get");params.put("fields", "item_id,title,price");params.put("num_iid", "123456"); // 替换为实际的商品 IDtry {String jsonResponse = apiCaller.callApi(params);Map<String, Object> reconstructedData = JsonParserAndReconstructor.parseAndReconstruct(jsonResponse);System.out.println(reconstructedData);} catch (IOException e) {e.printStackTrace();}}
}    

 

六、总结

通过以上步骤,你可以使用 Java 调用淘宝 API 获取商品详情页的 JSON 数据,并对其进行解析和重构。在实际应用中,需要根据淘宝 API 的文档和实际返回的 JSON 数据结构进行调整。同时,要注意遵守淘宝平台的使用规则,避免因违规操作导致账号被封禁。

相关文章:

基于 Java 的淘宝 API 调用实践:商品详情页 JSON 数据结构解析与重构

一、引言 在电商领域&#xff0c;淘宝拥有海量的商品数据。通过调用淘宝 API 可以获取商品详情页的 JSON 数据&#xff0c;这对于商家进行市场分析、竞品调研等具有重要意义。本文将详细介绍如何使用 Java 调用淘宝 API&#xff0c;获取商品详情页的 JSON 数据&#xff0c;并对…...

Sentinel源码—3.ProcessorSlot的执行过程二

大纲 1.NodeSelectorSlot构建资源调用树 2.LogSlot和StatisticSlot采集资源的数据 3.Sentinel监听器模式的规则对象与规则管理 4.AuthoritySlot控制黑白名单权限 5.SystemSlot根据系统保护规则进行流控 3.Sentinel监听器模式的规则对象与规则管理 (1)Sentinel的规则对象 …...

【C++11】列表初始化、右值引用、完美转发、lambda表达式

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f310; C 语言 上篇文章&#xff1a;unordered_map、unordered_set底层编写 下篇文章&#xff1a;C11&#xff1a;新的类功能、模板的可…...

Spring中IOC的重点理解(笔记)

Spring: 出现在2002左右.解决企业级开发的难度.减轻对项目模块 类与类之间的管理帮助开发人员创建对象,管理对象之间的关系. 补充&#xff1a;什么是OCP原则&#xff1f;&#xff08;面试&#xff09; &#xff08;1&#xff09;是软件七大开发当中最基本的一个原则&#xff…...

数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记4

前言 前面详细介绍了关于SELECT语句的相关使用方法&#xff0c;继续上文的介绍&#xff0c;本文将继续介绍数据查询的其他相关操作&#xff0c;主要包括排序&#xff08;ORDER BY&#xff09;子句、分组&#xff08;GROUP BY&#xff09;子句。与此同时&#xff0c;介绍完单表…...

【1】CICD持续集成-docker本地搭建gitlab代码仓库社区版

‌一、gitlab社区版概述 GitLab社区版&#xff08;Community Edition, CE&#xff09;是一个开源的版本控制系统&#xff0c;适用于个人开发者、中小团队及大型企业。‌ GitLab社区版采用MIT许可证&#xff0c;用户可以免费使用和修改源代码。其主要功能包括代码托管、版本控制…...

Verdi工具使用心得知识笔记(一)

Verdi工具使用知识点提炼 本文来源于移知&#xff0c;具体文档请咨询厚台 一、基础概念 波形依赖 Verdi本身无法生成波形&#xff0c;需配合VCS等仿真工具生成.fsdb文件。核心功能模块 • nTrace&#xff1a;代码调试与追踪 • nSchema&#xff1a;原理图分析 • nState&…...

【25软考网工笔记】第二章 数据通信基础(4)数据编码

目录 一、曼彻斯特编码 1. 以太网 2. 题型(考试过的选择题) 1&#xff09;题目解析 二、差分曼彻斯特编码 三、两种曼彻斯特编码特点 ​编辑 1. 双相码 2. 将时钟和数据包含在信号数据流中 3. 编码效率低 4. 数据速率是码元速率的一半 5. 应用案例 ​编辑 1&…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB OTG测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 第四章 ATK-DLMP257B功能测试——USB OTG测试…...

现代c++获取linux系统磁盘大小

现代c获取linux系统磁盘大小 前言一、命令获取系统磁盘大小二、使用c获取系统磁盘大小三、总结 前言 本文介绍一种使用c获取linux系统磁盘大小的方法 一、命令获取系统磁盘大小 在linux系统中可以使用lsblk命令显示当前系统磁盘大小&#xff0c;如下图所示 lsblk二、使用c获…...

tcp和udp的数据传输过程以及区别

tcp和udp的数据传输过程以及区别 目录 一、数据传输过程 1.1 UDP 数据报服务图 1.2 TCP 字节流服务图 1.3 tcp和udp的区别 1.3.1 连接特性 1.3.2 可靠性 1.3.3 数据传输形式 1.3.4 传输效率与开销 应用场景 一、数据传输过程 1.1 UDP 数据报服务图 这张图展示了 UDP 数据报服务…...

C++项目-衡码云判项目演示

衡码云判项目是什么呢&#xff1f;简单来说就是这是一个类似于牛客、力扣等在线OJ系统&#xff0c;用户在网页编写代码&#xff0c;点击提交后传递给后端云服务器&#xff0c;云服务器将用户的代码和测试用例进行合并编译&#xff0c;返回结果到网页。 项目最大的两个亮点&…...

C 语言中的 volatile 关键字

1、概念 volatile 是 C/C 语言中的一个类型修饰符&#xff0c;用于告知编译器&#xff1a;该变量的值可能会在程序控制流之外被意外修改&#xff08;如硬件寄存器、多线程共享变量或信号处理函数等&#xff09;&#xff0c;因此编译器不应对其进行激进的优化&#xff08;如缓存…...

mysql表类型查询

普通表 SELECT table_schema AS database_name,table_name FROM information_schema.tables WHERE table_schema NOT IN (information_schema, mysql, performance_schema, sys)AND table_type BASE TABLEAND table_name NOT IN (SELECT DISTINCT table_name FROM informatio…...

JavaScript事件循环

目录 JavaScript 执行机制与事件循环 一、同步与异步代码 1. 同步代码&#xff08;Synchronous Code&#xff09; 2. 异步代码&#xff08;Asynchronous Code&#xff09; 二、事件循环&#xff08;Event Loop&#xff09; 1. 核心组成 2. 事件循环基本流程 3. 运行机制…...

Linux》》bash 、sh 执行脚本

通常使用shell去运行脚本&#xff0c;两种方法 》bash xxx.sh 或 bash “xxx.sh” 、sh xxx.sh 或 sh “xxx.sh” 》bash -c “cmd string” 引号不能省略 我们知道 -c 的意思是 command&#xff0c;所以 bash -c 或 sh -c 后面应该跟一个 command。...

Git完全指南:从入门到精通版本控制 ------- Git 查看提交历史(8)

Git提交历史深度解析&#xff1a;从代码考古到精准回退 前言 在软件开发的生命周期中&#xff0c;提交历史是团队协作的时空胶囊。Git作为分布式版本控制系统&#xff0c;其强大的历史追溯能力可帮助开发者&#xff1a; 精准定位引入Bug的提交分析代码演进趋势恢复误删的重要…...

精益数据分析(2/126):解锁数据驱动的商业成功密码

精益数据分析&#xff08;2/126&#xff09;&#xff1a;解锁数据驱动的商业成功密码 大家好&#xff01;在如今这个数据爆炸的时代&#xff0c;数据就像一座蕴含无限宝藏的矿山&#xff0c;等待着我们去挖掘和利用。最近我在深入研读《精益数据分析》这本书&#xff0c;收获了…...

【ssti模板注入基础】

一、ssti模板注入简介 二、模板在开发中的应用 为什么要使用模板 为什么要用模板来提升效率&#xff1a; 不管我们输入什么&#xff0c;有一部分内容都是不会变的 除了内容之外其他都不会变&#xff0c;如果我们有成千上万的页面&#xff0c;如果不用模板&#xff0c;就算复…...

如何在 Kali 上解决使用 evil-winrm 时 Ruby Reline 的 quoting_detection_proc 警告

在使用 Kali Linux 运行 Ruby 工具&#xff08;例如 evil-winrm&#xff09;时&#xff0c;你可能会遇到以下警告&#xff1a; Warning: Remote path completions is disabled due to ruby limitation: undefined method quoting_detection_proc for module Reline这个警告会导…...

从零开始搭建PyTorch环境(支持CUDA)

从零开始搭建PyTorch环境&#xff08;支持CUDA&#xff09; 本文将详细介绍如何在Windows系统上为RTX 3050显卡配置支持CUDA的PyTorch环境。 环境准备 本教程基于以下环境&#xff1a; 显卡&#xff1a;NVIDIA RTX 3050操作系统&#xff1a;WindowsPython版本&#xff1a;3.1…...

【扩散模型连载 · 第 2 期】逆向扩散建模与神经网络的角色

上期回顾 我们在第 1 期中介绍了 正向扩散过程&#xff08;Forward Process&#xff09;&#xff0c;并用 CIFAR-10 图像演示了加噪过程&#xff1a; 正向过程是固定的&#xff0c;无需训练&#xff0c;但我们感兴趣的是&#xff1a;如何从纯噪声一步步“还原”出真实图像&…...

Mysql约束

约束其实就是创建表的时候给表的某些列加上限制条件。 主键约束和自增长约束比较重要 一、Mysql约束-主键约束 简介 指定的主键不能重复也不可以出现空值 1.添加单列主键 语法1&#xff1a;create table 表名&#xff08;字段名 数据类型 primary key&#xff09;; 点开…...

力扣热题100—滑动窗口(c++)

3.无重复字符的最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 unordered_set<char> charSet; // 用于保存当前窗口的字符int left 0; // 窗口左指针int maxLength 0; // 最长子串的长度for (int right 0; right < s.siz…...

Linux网络编程第一课:深入浅出TCP/IP协议簇与网络寻址系统

知识点1【网络发展简史】 **网络节点&#xff1a;**路由器和交换机组成 交换机的作用&#xff1a;拓展网络接口 路由&#xff1a;网络通信路径 1、分组交换 分组的目的&#xff1a; 数据量大&#xff0c;不能一次型传输&#xff0c;只能分批次传输&#xff0c;这里的每一批…...

论文阅读笔记:Generative Modeling by Estimating Gradients of the Data Distribution

1、参考来源 论文《Generative Modeling by Estimating Gradients of the Data Distribution》 来源&#xff1a;NeurIPS 2019 论文链接&#xff1a;https://arxiv.org/abs/1907.05600 参考链接&#xff1a; 【AI知识分享】真正搞懂扩散模型Score Matching一定要理解的三大核心…...

C++零基础实践教程 函数 数组、字符串与 Vector

模块四&#xff1a;函数 (代码复用与模块化) 随着程序变得越来越复杂&#xff0c;把所有代码都堆在 main 函数里会变得难以管理和阅读。函数 (Function) 允许你将代码分解成逻辑上独立、可重用的块。这就像把一个大任务分解成几个小任务&#xff0c;每个小任务交给一个专门的“…...

照片处理工具:基于HTML与JavaScript实现详解

在当今数字时代,处理照片已成为日常需求。 本文将详细介绍一个基于HTML和JavaScript的照片处理工具的实现原理,这个工具可以调整图片尺寸、格式,并精确控制输出文件大小。 实现如下,不需要任何编辑器,txt文本、浏览器就行!! 工具功能概述 这个照片处理工具提供以下核心…...

MyBatis-OGNL表达式

介绍 OGNL&#xff08;Object-Graph Navigation Language&#xff09;是一种强大的表达式语言&#xff0c;用于获取和设置Java对象图中的属性。在MyBatis中&#xff0c;OGNL常用于动态SQL构建&#xff0c;如条件判断、循环等。以下是关于OGNL表达式的整合信息&#xff0c;包括…...

Web Worker在uniapp鸿蒙APP中的深度应用

文章目录 一、Web Worker核心概念解析1.1 什么是Web Worker&#xff1f;1.2 为什么在鸿蒙APP中使用Web Worker&#xff1f;1.3 性能对比实测 二、uniapp中的Web Worker完整实现2.1 基础配置步骤2.1.1 项目结构准备2.1.2 鸿蒙平台特殊配置 2.2 Worker脚本编写规范2.3 主线程通信…...

无人机故障冗余设计技术要点与难点!

一、技术要点 1. 冗余架构设计 硬件冗余&#xff1a;关键部件&#xff08;飞控、电机、电池、通信模块&#xff09;采用双余度或三余度设计&#xff0c;例如&#xff1a; 双飞控系统&#xff1a;主飞控失效时&#xff0c;备用飞控无缝接管。 电机动力冗余&#xff1a;六轴无…...

MySQL数据库表查询

测试表company.employee5 mysql> create database company; #创建一个库&#xff1b; 创建一个测试表: mysql> CREATE TABLE company.employee5(id int primary key auto_increment not null,name varchar(30) not null,sex enum(male,female) default male not null,hi…...

ADB的安装及抓取日志(2)

三、ADB抓取日志 在使用ADB抓取日志前&#xff0c;首先要保证电脑已经安装并配置ADB&#xff0c;在上一节已经验证完成。连接设备&#xff1a;可通过USB或者WI-FI&#xff0c;将安卓设备与电脑连接&#xff0c;并启用USB调试模式&#xff0c;此处我选择的是通过电脑与安卓设备…...

【C++】 —— 笔试刷题day_17

一、小乐乐改数字 题目解析 这道题&#xff0c;它们给定一个数&#xff0c;我们要对它进行修改&#xff1b;如果某一位是奇数&#xff0c;就把它变成1,&#xff1b;如果是偶数&#xff0c;就把它变成0&#xff1b; 让我们输出最后得到的数。 算法思路 这道题&#xff0c;总体…...

traceId传递

1、应用内传递通过ThreadLocal,InheritableThreadLocal传递 2、跨进程的应用间传递&#xff0c;这种会涉及到远程rpc通信&#xff0c;mq通信&#xff0c;数据库通信等。 feign:拦截器中改变请求头 feign.RequestInterceptor, 这个机制能够实现修改请求对象的目的&#xff0c…...

自然科技部分详解

光的反射 凸面镜与凹面镜 凸透镜和凹透镜 空气开关原理 短路是指电路中突然的电流过大&#xff0c;这会让线圈的磁性增大&#xff0c;来克服内设的弹簧导致断开 过载会让电流增大&#xff0c;两金属片受热膨胀触发断开 核电荷数是指原子核所带的电荷数。 在原子中&#xf…...

蓝桥杯 9. 九宫幻方

九宫幻方 原题目链接 题目描述 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分。 三阶幻方是指将 1 ~ 9 不重复地填入一个 33 的矩阵中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格&#x…...

算法——希尔排序

目录 一、希尔排序定义 二、希尔排序原理 三、希尔排序特点 四、两种解法 五、代码实现 一、希尔排序定义 希尔排序是一种基于插入排序的排序算法&#xff0c;也被称为缩小增量排序。它通过将待排序的数组分割成若干个子序列&#xff0c;对子序列进行排序&#xff0c;然后…...

亚马逊热销变维权?5步搭建跨境产品的安全防火墙

“产品热卖&#xff0c;引来维权”——这已经悄然成为越来越多跨境卖家的“热销烦恼”。曾经拼品拼量&#xff0c;如今却要步步谨慎。商标侵权、专利投诉、图片盗用……这些问题一旦发生&#xff0c;轻则下架、账号被限&#xff0c;重则冻结资金甚至封店。 别让“热销”变“受…...

20250416-Python 中常见的填充 `pad` 方法

Python 中常见的填充 pad 方法 在 Python 中&#xff0c;pad 方法通常与字符串或数组操作相关&#xff0c;用于在数据的前后填充特定的值&#xff0c;以达到指定的长度或格式。以下是几种常见的与 pad 相关的用法&#xff1a; 1. 字符串的 pad 操作 虽然 Python 的字符串没有…...

JavaEE-0416

今天修复了一个查询数据时数据显示哈希码&#xff1a; 搜索检阅后得到显示该格式的原因&#xff1a; 重写 POJO 类的 toString 方法 在 Java 编程中&#xff0c;默认情况下&#xff0c;对象的 toString() 方法会返回类似于 com.cz.pojo.Score2a266d09 的字符串。这是由于默认…...

团体程序设计天梯赛L2-008 最长对称子串

对给定的字符串&#xff0c;本题要求你输出最长对称子串的长度。例如&#xff0c;给定Is PAT&TAP symmetric?&#xff0c;最长对称子串为s PAT&TAP s&#xff0c;于是你应该输出11。 输入格式&#xff1a; 输入在一行中给出长度不超过1000的非空字符串。 输出格式&…...

命令模式 (Command Pattern)

命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。该模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。 一、基础 1.1 意图 将请求封…...

Elasticsearch 8.18 中提供了原生连接 (Native Joins)

作者&#xff1a;来自 Elastic Costin Leau 探索 LOOKUP JOIN&#xff0c;这是一条在 Elasticsearch 8.18 的技术预览中提供的新 ES|QL 命令。 很高兴宣布 LOOKUP JOIN —— 这是一条在 Elasticsearch 8.18 的技术预览中提供的新 ES|QL 命令&#xff0c;旨在执行左 joins 以进行…...

在线终端(一个基于 Spring Boot 的在线终端模拟器,实现了类 Linux 命令行操作功能)

Online Terminal 一个基于 Spring Boot 的在线终端模拟器,实现了类 Linux 命令行操作功能。 功能特点 模拟 Linux 文件系统操作支持基础的文件和目录管理命令提供文件内容查看和编辑功能支持文件压缩和解压缩操作 快速开始 环境要求 JDK 8Maven 3.6 运行项目 克隆项目到…...

vue+electron ipc+sql相关开发(三)

在 Electron 中使用 IPC(Inter-Process Communication)与 SQLite 数据库进行通信是一个常见的模式,特别是在需要将数据库操作从渲染进程(Vue.js)移到主进程(Electron)的情况下。这样可以更好地管理数据库连接和提高安全性。下一篇介绍结合axios写成通用接口形式,虽然没…...

C++静态变量多线程中的未定义行为

静态变量&#xff0c;是 C 程序员最早接触的语言特性之一。它有状态、生命周期长、初始化一次&#xff0c;用起来真是香。 但只要程序一旦进入多线程的世界&#xff0c;很多你原以为“稳定可靠”的写法&#xff0c;可能就突然开始“不对劲”了。静态变量首当其冲。 今天我们就…...

黑马商城项目(二) Docker

一、Docker快速入门 安装Docker - 飞书云文档 二、命令解读 常见命令&#xff1a; 数据卷&#xff1a; 案例1 数据卷挂载&#xff1a; 案例2 本地目录挂载&#xff1a; 挂载到指定目录能够保存数据&#xff08;即使Mysql容器被删除&#xff09; docker run -d \--name mysql …...

玩转Docker | 使用Docker部署Memos笔记工具

玩转Docker | 使用Docker部署Memos笔记工具 前言一、Memos介绍Memos简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Memos服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问Memos服务访问Memos首页注册账号五、基本使用…...

c#从ftp服务器下载文件读取csv

从 FTP 服务器下载文件的功能&#xff0c;并且支持根据文件名称的前缀或直接文件名进行查找和下载。以下是对代码的一些建议和修改&#xff0c;以确保它能够满足您的需求&#xff0c;尤其是如果您希望仅下载特定类型的文件&#xff08;例如 .csv 文件&#xff09; using Syste…...