swagger-codegen 模型生成全解析:以 rest-assured 客户端的 ArrayOfArrayOfNumberOnly(二维数字数组)为例
开发工具代码生成API设计【免费下载链接】swagger-codegenswagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.项目地址https://gitcode.com/gh_mirrors/sw/swagger-codegen点击查看免费下载导读本文以 swagger-codegen 仓库中 Javarest-assured客户端示例所生成的模型类ArrayOfArrayOfNumberOnly为切入点完整还原OpenAPI 定义 → 代码生成 → Java 源码实现 → 实际使用的整条链路。读完本文你将掌握 swagger-codegen 如何把 OpenAPI 中嵌套的二维数组array of array of number映射为 Java 泛型集合ListListBigDecimal理解生成模型的字段命名、fluent 构建 API、序列化注解与 equals/hashCode/toString 约定并能在自己的生成客户端中正确读写此类模型。一、文档定位一份由 swagger-codegen 自动生成的模型参考页ArrayOfArrayOfNumberOnly.md 是 swagger-codegen 为 Java rest-assured 客户端示例samples/client/petstore/java/rest-assured自动生成的模型文档之一。它的结构非常简洁属于每个模型一份的 API 参考页与同目录下的ArrayOfNumberOnly.md、NumberOnly.md、Pet.md等 40 余份文档共同组成客户端模型的完整文档集完整清单见 docs 目录。原始文档核心内容是一个属性表描述模型的全部字段NameTypeDescriptionNotesarrayArrayNumberListListBigDecimal[optional]从表中可以得到三个关键信息模型类名是ArrayOfArrayOfNumberOnly暗示该模型只包含一个二维数字数组字段是 swagger-codegen 官方 fake 模型petstorefake中用于测试各类数据类型的样例模型之一唯一属性arrayArrayNumber的类型是ListListBigDecimal即列表的列表——外层列表的每个元素本身又是一个数字列表该属性标为optional可选即接口返回的 JSON 中可以不携带该字段。二、源头追溯OpenAPI 规格中的二维数组定义模型文档只是结果真正的源头在 OpenAPISwagger 2.0 / OpenAPI 3.0规格文件中。仓库中的 petstorefake.yaml 给出了该模型的原始定义ArrayOfArrayOfNumberOnly: type: object properties: ArrayArrayNumber: type: array items: type: array items: type: number这段定义体现了 OpenAPI 中嵌套数组的标准写法顶层type: object属性名为ArrayArrayNumber注意规格中字段名以大写 A 开头属性本身是type: array其items又是type: array第二层数组最内层items才是type: number。即数组的数组最内层元素为数字。同样的定义还出现在仓库其他规格文件中例如 OpenAPI 3.0 版本的 petstore3fake.yaml、petstoreMixed3.yaml以及 v2 的 samplesServers.yaml 中swagger-codegen 的测试资源 petstore-with-fake-endpoints-models-for-testing.yaml 也复用了同一份定义。这组规格文件正是 swagger-codegen 测试与示例生成的基准数据源也解释了为什么仓库里不同语言、不同版本示例中都能看到同名模型。从源码结构看ArrayOfArrayOfNumberOnly与NumberOnly单数字字段、ArrayOfNumberOnly一维数字数组在 petstorefake.yaml 中依次排列构成单值 → 一维数组 → 二维数组的递进测试序列用于验证生成器对数组维度与嵌套类型处理能力的边界。三、代码生成从 YAML 到 Java 类的映射规则swagger-codegen 的核心引擎根据模板template将上述 YAML 定义渲染为各语言源码。对于 Java rest-assured 客户端该模型被生成为 ArrayOfArrayOfNumberOnly.java其类型映射关系如下OpenAPI 概念生成结果type: objectmodel独立的 Java 类ArrayOfArrayOfNumberOnly包io.swagger.client.model属性ArrayArrayNumber字段arrayArrayNumberJava 命名规范小驼峰type: array外层List...items: type: array内层ListBigDecimalitems: type: number最内层BigDecimal可以看到OpenAPI 的每一层数组type: array都对应一层 Java 泛型List而number类型被映射为java.math.BigDecimal——这是 Java 处理任意精度十进制数如金融金额、高精度测量值的标准类型能避免double/float的浮点误差。类声明与字段定义对应源码ArrayOfArrayOfNumberOnly.java#L34-L36public class ArrayOfArrayOfNumberOnly { SerializedName(ArrayArrayNumber) private ListListBigDecimal arrayArrayNumber null;其中SerializedName(ArrayArrayNumber)来自 Gson 注解com.google.gson.annotations.SerializedName它保证了序列化/反序列化时的 JSON 字段名与 OpenAPI 规格一致即保持大写开头的ArrayArrayNumber而 Java 内部字段名arrayArrayNumber遵循小驼峰规范两者通过注解桥接private ListListBigDecimal arrayArrayNumber null;初始值为null正好与文档中optional标注对应——未设置时序列化会省略该字段而非输出空数组。四、生成源码深度解读fluent API、增删改查与通用约定4.1 链式赋值的 fluent 风格swagger-codegen 生成的 Java 模型普遍采用返回this的 fluent 风格方法。赋值方法ArrayOfArrayOfNumberOnly.java#L38-L41public ArrayOfArrayOfNumberOnly arrayArrayNumber(ListListBigDecimal arrayArrayNumber) { this.arrayArrayNumber arrayArrayNumber; return this; }调用时可以直接链式编写new ArrayOfArrayOfNumberOnly().arrayArrayNumber(rows)返回值仍是当前对象便于连续构建。4.2 逐行追加addArrayArrayNumberItem针对列表的列表这种嵌套结构生成器额外提供了逐元素追加方法ArrayOfArrayOfNumberOnly.java#L43-L49public ArrayOfArrayOfNumberOnly addArrayArrayNumberItem(ListBigDecimal arrayArrayNumberItem) { if (this.arrayArrayNumber null) { this.arrayArrayNumber new ArrayListListBigDecimal(); } this.arrayArrayNumber.add(arrayArrayNumberItem); return this; }该方法在字段为null时自动初始化为ArrayList然后追加一行一个ListBigDecimal。注意这里追加的单位是一行数组因此调用 N 次就相当于在 JSON 中形成 N 行数字。4.3 标准的 getter / setter对应文档属性表模型提供标准访问器ArrayOfArrayOfNumberOnly.java#L56-L62ApiModelProperty(value ) public ListListBigDecimal getArrayArrayNumber() { return arrayArrayNumber; } public void setArrayArrayNumber(ListListBigDecimal arrayArrayNumber) { this.arrayArrayNumber arrayArrayNumber; }getArrayArrayNumber()上还标注了 Swagger 注解ApiModelPropertyio.swagger.annotations.ApiModelProperty供文档工具与 Swagger 运行时识别该属性。4.4 equals / hashCode / toString 约定与 Java 对象规范一致生成类重写了三个方法ArrayOfArrayOfNumberOnly.java#L65-L91equals先判断对象同一性再判null与类类型最后用Objects.equals(this.arrayArrayNumber, other.arrayArrayNumber)按字段比较hashCode基于Objects.hash(arrayArrayNumber)计算toString输出class ArrayOfArrayOfNumberOnly { arrayArrayNumber: ... }形式内部通过toIndentedString将多行字符串按 4 空格缩进保证日志可读性。五、实战用法构造、序列化与解析5.1 构造二维数组模型基于上述生成 API构造一个包含两行数字的模型import io.swagger.client.model.ArrayOfArrayOfNumberOnly; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; ArrayOfArrayOfNumberOnly model new ArrayOfArrayOfNumberOnly() .addArrayArrayNumberItem(Arrays.asList(new BigDecimal(1.1), new BigDecimal(2.2))) .addArrayArrayNumberItem(Arrays.asList(new BigDecimal(3.3), new BigDecimal(4.4), new BigDecimal(5.5)));此时模型内部等价于 JSON 结构{ ArrayArrayNumber: [ [1.1, 2.2], [3.3, 4.4, 5.5] ] }注意由于addArrayArrayNumberItem追加的粒度是一行二维数组的每行长度可以不同这是它与规整矩形数组如矩阵的本质区别。5.2 整体替换与读取如果已有完整二维列表可直接用 setter 一次性赋值ListListBigDecimal rows new ArrayList(); rows.add(Arrays.asList(new BigDecimal(1), new BigDecimal(2))); model.setArrayArrayNumber(rows); ListListBigDecimal result model.getArrayArrayNumber();遍历时逐层解包for (ListBigDecimal row : result) { for (BigDecimal value : row) { System.out.println(value); } }5.3 在 rest-assured 客户端中的使用场景该模型归属于samples/client/petstore/java/rest-assured示例客户端。它所在的包io.swagger.client.model存放全部数据模型而 API 调用由io.swagger.client.api包下的 Api 类如 FakeApi.java负责底层通过 rest-assured 发送 HTTP 请求。从 FakeApi.java 的 import 列表 可以看到java.math.BigDecimal同样用于fakeOuterNumberSerialize等外层类型序列化测试接口与本文模型使用同一套数值类型策略。模型对象经由 Gson 按SerializedName完成与 JSON 的互转后即可作为请求体或响应体参与客户端调用。六、跨语言印证同一模型在各生成客户端中的形态由于 swagger-codegen 是模板驱动引擎同一 OpenAPI 定义在其它语言示例中会生成对应形态的类可用来印证映射规则的通用性。例如 C# 示例 ArrayOfArrayOfNumberOnly.cs 中属性被生成为ListListdecimal?可空 decimal并提供构造函数参数C# 测试资源 ArrayOfArrayOfNumberOnlyTests.cs 中保留了针对该模型实例化与属性测试的模板注释。此外 bash 客户端文档 ArrayOfArrayOfNumberOnly.md 同样列出了该模型。这从侧面说明array of array of number这一模式在各语言生成器中被统一建模为二维集合/数组且字段名规范因语言而异Java 为arrayArrayNumberJSON 线上名统一为ArrayArrayNumber。七、小结与延伸阅读ArrayOfArrayOfNumberOnly是一个典型的 swagger-codegen 生成模型文档页docs/ArrayOfArrayOfNumberOnly.md描述其唯一属性arrayArrayNumberListListBigDecimal、可选生成源码ArrayOfArrayOfNumberOnly.java则以 fluent 追加方法 Gson 注解 标准对象约定完整实现了该结构。理解它等于掌握了 swagger-codegen 对嵌套集合类模型从 OpenAPI 规格到 Java 代码的全部映射规则。如需深入可在仓库中继续对照一维版本模型文档ArrayOfNumberOnly.md 与 NumberOnly.md对比数组维度的差异OpenAPI 3.0 规格定义petstore3fake.yaml生成器的测试资源集petstore-with-fake-endpoints-models-for-testing.yaml该示例客户端的 API 文档入口FakeApi.md。赞分享开发工具代码生成API设计【免费下载链接】swagger-codegenswagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.项目地址https://gitcode.com/gh_mirrors/sw/swagger-codegen点击查看免费下载相关推荐使用 swagger-codegen 将二维数组模型生成 C 客户端以 ArrayOfArrayOfNumberOnly 为例使用 swagger codegen 将二维数组模型生成 C 客户端以 ArrayOfArrayOfNumberOnly 为例 本文以 swagger cod开发工具代码生成API设计Swagger Codegen 中的数组模型生成以 Java (REST Assured) 客户端 AnimalFarm 为例Swagger Codegen 中的数组模型生成以 Java REST Assured 客户端 AnimalFarm 为例 导读 AnimalFarm.md开发工具代码生成API设计swagger-codegen Bash 客户端二维数组模型文档深度解析以 ArrayOfArrayOfNumberOnly 为例swagger codegen Bash 客户端二维数组模型文档深度解析以 ArrayOfArrayOfNumberOnly 为例 本文以 swagger c开发工具代码生成API设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Kettle PDI9.2实战指南:安装、转换、作业与调优全解析

Kettle PDI9.2实战指南:安装、转换、作业与调优全解析

简介:本资源是一份面向1–3年经验研发人员的Kettle(Pentaho Data Integration)入门级教学PPT,聚焦ETL核心流程与工具实操,解决数据同步、转换建模及生产环境落地中的基础认知与配置难题。压缩包内含1个859KB的PPTX文件…

2026/10/11 14:31:35 阅读更多 →
公众号刚下场:Treg 接过 “OpenRouter for Agent Tools“ 叙事,中文圈进入开写节奏

公众号刚下场:Treg 接过 “OpenRouter for Agent Tools“ 叙事,中文圈进入开写节奏

公众号刚下场:Treg 接过 "OpenRouter for Agent Tools" 叙事,中文圈进入开写节奏 【免费下载链接】treg OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn 项目地址: https://gitcode.com/GitHub_Trending/…

2026/10/11 14:31:35 阅读更多 →
数据集04-番茄叶片病害识别数据集介绍

数据集04-番茄叶片病害识别数据集介绍

【深度学习数据集】番茄叶片病害识别数据集介绍 番茄叶片出现斑点、霉层或卷曲时,不同病害的症状容易混淆。使用深度学习模型识别叶片图片,可以辅助判断病害类别,并将识别结果保存到样本库中,便于后续查询和统计。 本文数据集包含…

2026/10/11 14:31:35 阅读更多 →

最新新闻

电赛常用模块硬件积木清单:从电源主控到电机驱动与无线通信的选型搭建指南

电赛常用模块硬件积木清单:从电源主控到电机驱动与无线通信的选型搭建指南

简介:这份资料面向参加电子设计竞赛(电赛)的学生与指导教师,系统梳理了控制类赛题常用的硬件模块与软件程序,帮助备赛者快速建立完整的知识框架。内容涵盖电源模块(12V、9V、5V、3.3V及LM337负压方案&#…

2026/10/11 16:04:25 阅读更多 →
Access 2007数据分析技巧:从Excel台账到可复用查询体系

Access 2007数据分析技巧:从Excel台账到可复用查询体系

简介:本资源是面向Access用户的数据分析进阶读物,由微软认证应用程序开发师迈克尔亚历山大撰写,适合希望从Excel转向关系型数据库、提升数据处理与查询能力的职场人士与学习者。内容从Access 2007进行数据分析的理由切入,对比其在…

2026/10/11 16:04:25 阅读更多 →
华为云MRS大数据实验从零到一:集群创建、Hive/Spark作业与避坑指南

华为云MRS大数据实验从零到一:集群创建、Hive/Spark作业与避坑指南

简介:这份实验报告围绕华为云大数据平台,完整收录四个实验:使用弹性云服务器ECS与对象存储OBS搭建Hadoop集群,配置访问密钥、完成OpenJDK安装、防火墙关闭与节点SSH互信;通过华为云托管服务实现数据收集与分析&#xf…

2026/10/11 16:04:25 阅读更多 →
架构师岗位真的会消失吗?用TaoToken打通Cursor Rules、Memories、Commands三大神器,小白也能写出专家级代码

架构师岗位真的会消失吗?用TaoToken打通Cursor Rules、Memories、Commands三大神器,小白也能写出专家级代码

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 16:04:25 阅读更多 →
基于Python的文本相似度计算系统:Django+MySQL与余弦算法实现

基于Python的文本相似度计算系统:Django+MySQL与余弦算法实现

简介:一份基于Python的文本相似度计算系统的毕业设计论文文档,面向计算机相关专业学生及NLP入门者。文档涵盖课题背景、可行性分析、系统设计、功能实现和实验评估等完整章节,核心内容包括文本清洗与分词、TF-IDF关键词提取、词向量构建、余弦…

2026/10/11 16:04:25 阅读更多 →
Token 降本 50%:Harness 工作流成本优化实践与 TaoToken 统一通道配置

Token 降本 50%:Harness 工作流成本优化实践与 TaoToken 统一通道配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 16:03:25 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →