ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Swagger Codegen 生成模型解析:MixedPropertiesAndAdditionalPropertiesClass 的混合属性与附加属性机制

Swagger Codegen 生成模型解析:MixedPropertiesAndAdditionalPropertiesClass 的混合属性与附加属性机制 开发工具代码生成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 仓库中 Jersey1 Java 客户端示例生成的模型MixedPropertiesAndAdditionalPropertiesClass为核心讲解 Swagger/OpenAPI 规范中普通命名属性 additionalProperties 动态映射这一混合模型是如何被定义、被代码生成器翻译为 Java 类并在客户端中完成序列化与使用的。读完本文你将掌握这类模型的规范写法、类型映射规则UUID、OffsetDateTime、泛型 Map以及生成代码的调用方式。模型概览它是什么MixedPropertiesAndAdditionalPropertiesClass是 swagger-codegen 使用 Petstore 样例规范petstorefake生成的一个测试模型类用于验证代码生成器对混合属性Mixed Properties与附加属性Additional Properties同时存在的模型定义的支持能力。从模型名即可看出其设计意图Mixed Properties模型拥有若干个明确的、命名好的属性uuid、dateTimeAdditional Properties模型还通过additionalProperties声明了一个键值对动态映射map字段。这类模型在真实业务中非常常见——一个对象既携带固定的结构化字段又允许调用方按需传入任意附加的扩展字段例如用户自定义标签、配置项的键值对集合等。属性明细完整属性表以下属性表直接继承自该模型的自动生成文档MixedPropertiesAndAdditionalPropertiesClass.mdNameTypeDescriptionNotesuuidUUID[optional]dateTimeOffsetDateTime[optional]mapMapString, Animal[optional]三个属性的要点uuid类型为UUID规范中对应type: string, format: uuiddateTime类型为OffsetDateTime规范中对应type: string, format: date-timemap类型为MapString, Animal这是由规范中的type: object配合additionalProperties生成的泛型映射值类型为另一个模型Animal。三个属性均标注为[optional]即非必填。需要注意表格中UUID与OffsetDateTime指向的独立文档页在生成产物中并不存在——因为它们是 Java 标准库java.util.UUID与第三方日期库ThreeTen-BP 的org.threeten.bp.OffsetDateTime提供的类型并非生成器内部定义的模型因此不会生成对应的模型文档页而Animal是规范中定义的用户模型生成了独立的 Animal.md 页面其属性为classNameString必填与colorString可选。规范定义溯源两份 Petstore 规范中的模型声明该模型的根定义来自仓库中的测试规范fixture在 OpenAPI/Swagger 2.0 与 OpenAPI 3.0 两套规范中各有一份等价声明。OpenAPI 3.0 版本petstore3fake.yamlMixedPropertiesAndAdditionalPropertiesClass: type: object properties: uuid: type: string format: uuid dateTime: type: string format: date-time map: type: object additionalProperties: $ref: #/components/schemas/Animal example: uuid: bbe4001e-f700-11e8-8eb2-f2801f1b9fd1 dateTime: 2018-11-05 09:25Swagger 2.0 版本petstorefake.yamlMixedPropertiesAndAdditionalPropertiesClass: type: object properties: uuid: type: string format: uuid dateTime: type: string format: date-time map: type: object additionalProperties: $ref: #/definitions/Animal两版差异仅在于引用的写法3.0 使用#/components/schemas/Animal2.0 使用#/definitions/Animal语义完全一致。这份 fixture 同时被 v2/v3 两套规范引用说明该模型是 swagger-codegen 用于回归测试混合属性 附加属性能力的标准用例生成器对两种规范版本的解析结果应当保持一致。生成源码深度解析Java 类结构对应生成的 Java 类位于 MixedPropertiesAndAdditionalPropertiesClass.java。其字段声明如下JsonProperty(uuid) private UUID uuid null; JsonProperty(dateTime) private OffsetDateTime dateTime null; JsonProperty(map) private MapString, Animal map null;值得注意的实现细节字段通过 Jackson 注解JsonProperty与 JSON 属性名一一对应属性名保持与规范中的 key 完全一致OffsetDateTime来自org.threeten.bp包这是 Jersey1 示例使用的 ThreeTen-BPJava 8 之前日期时间库的移植版说明生成器会根据生成环境选择日期类型依赖MapString, Animal对应规范中map字段的additionalProperties: $ref Animal生成器把值为 Animal 引用的附加属性映射翻译为 Java 泛型 Map。链式 setter 与 Map 的懒加载添加方法除了标准 getter/setter生成器还产出了支持流式调用的链式方法每个都返回thispublic MixedPropertiesAndAdditionalPropertiesClass uuid(UUID uuid) { this.uuid uuid; return this; }对于 Map 类型的属性额外生成了便捷的单项添加方法并在内部完成懒加载初始化public MixedPropertiesAndAdditionalPropertiesClass putMapItem(String key, Animal mapItem) { if (this.map null) { this.map new HashMapString, Animal(); } this.map.put(key, mapItem); return this; }这种putXxxItem模式是 swagger-codegen 对 Map 属性统一生成的辅助方法使用户无需关心 map 是否已初始化可以直接逐项填充是生成代码中可复用的通用范式。equals / hashCode / toString类还重写了equals、hashCode与toStringequals基于Objects.equals逐个比较三个属性hashCode使用Objects.hash(uuid, dateTime, map)计算toString输出形如class MixedPropertiesAndAdditionalPropertiesClass { uuid: ..., dateTime: ..., map: ... }的可读字符串null 值显示为null多行内容自动缩进 4 空格。这些方法保证了模型可作为集合元素参与比较与哈希运算也便于日志输出调试。类型映射机制规范格式到 Java 类型从规范到 Java 的类型映射是本模型最有代表性的部分映射规则如下OpenAPI 声明Java 类型说明type: string, format: uuidjava.util.UUID使用 JDK 标准 UUID 类型type: string, format: date-timeorg.threeten.bp.OffsetDateTime带时区偏移的日期时间来自 ThreeTen-BPtype: objectadditionalPropertiesMapString, 值类型附加属性映射被翻译为泛型 Mapkey 固定为 StringadditionalProperties: $ref AnimalMapString, Animal引用类型作为 Map 的值类型该模型的map字段是嵌套引用的典型additionalProperties的值是一个$ref指向的模型最终生成MapString, Animal说明生成器会递归解析引用并生成对应的泛型类型。同时同目录的 AdditionalPropertiesClass.md 展示了附加属性的另外两种形态mapPropertyMapString, String标量值与mapOfMapPropertyMapString, MapString, String嵌套 Map 值两者配合即可覆盖附加属性机制的全部常见组合。实战使用构造与序列化基于生成的链式 setter 与putMapItem在客户端代码中可以这样构造该模型import io.swagger.client.model.MixedPropertiesAndAdditionalPropertiesClass; import io.swagger.client.model.Animal; import java.util.UUID; import org.threeten.bp.OffsetDateTime; MixedPropertiesAndAdditionalPropertiesClass obj new MixedPropertiesAndAdditionalPropertiesClass() .uuid(UUID.fromString(bbe4001e-f700-11e8-8eb2-f2801f1b9fd1)) .dateTime(OffsetDateTime.parse(2018-11-05T09:25:0008:00)) .putMapItem(dog, new Animal().className(Dog).color(white));对应的 JSON 形如{ uuid: bbe4001e-f700-11e8-8eb2-f2801f1b9fd1, dateTime: 2018-11-05T09:25:0008:00, map: { dog: { className: Dog, color: white } } }规范中自带的example片段uuid: bbe4001e-f700-11e8-8eb2-f2801f1b9fd1、dateTime: 2018-11-05 09:25可作为测试数据的参考格式。重新生成该模型的说明该 Java 类属于生成产物由 swagger-codegen 依据 petstorefake.yaml 等规范自动生成源码头部标注了 auto generated by the swagger code generator programDo not edit the class manually因此不应手工修改。如需调整模型行为应修改规范定义后使用 swagger-codegen-cli 的generate命令重新生成对应语言的客户端代码仓库根目录的 README.md 提供了生成器的整体使用说明Jersey1 客户端的完整样例结构可参考 samples/client/petstore/java/jersey1/README.md。小结MixedPropertiesAndAdditionalPropertiesClass虽然只是 petstore 样例中的一个测试模型却完整展示了 swagger-codegen 对三类典型能力的处理format: uuid与format: date-time的精确类型映射、additionalProperties到泛型 Map 的翻译、以及引用类型作为 Map 值时的递归解析。理解这一模型等于掌握了 Swagger/OpenAPI 中固定属性 动态扩展混合对象在代码生成体系下的完整生命周期——从规范声明、类型推导到链式 API 与序列化表现。赞分享开发工具代码生成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 生成的 MixedPropertiesAndAdditionalPropertiesClass混合属性 附加属性模型的 Java 实现解析swagger codegen 生成的 MixedPropertiesAndAdditionalPropertiesClass混合属性 附加属性模型的 J开发工具代码生成API设计Swagger Codegen 生成的 MixedPropertiesAndAdditionalPropertiesClass 模型解析混合属性与附加属性的 Java 客户端实践指南Swagger Codegen 生成的 MixedPropertiesAndAdditionalPropertiesClass 模型解析混合属性与附加属性的开发工具代码生成API设计swagger-codegen Go 客户端模型生成实战MixedPropertiesAndAdditionalPropertiesClass 与附加属性机制解析swagger codegen Go 客户端模型生成实战MixedPropertiesAndAdditionalPropertiesClass 与附加属性机制开发工具代码生成API设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表