首页/新闻资讯/正文详情

swagger-codegen 生成 Java Jersey1 客户端的枚举模型 EnumTest:源码解读与实战指南

发布时间:2026/9/23 22:48:28 来源:云帆数科 栏目:资讯中心
swagger-codegen 生成 Java Jersey1 客户端的枚举模型 EnumTest:源码解读与实战指南
开发工具代码生成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点击查看免费下载导读EnumTest.md 是 swagger-codegen 为 JavaJersey1 Jackson客户端生成的 Petstore 样例中关于EnumTest模型的 API 文档。本文以该文档为骨架结合仓库中的 OpenAPI 定义petstorefake.yaml 等、生成的 Java 源码EnumTest.java与单元测试EnumValueTest.java系统讲解枚举字段在 Swagger/OpenAPI 定义中的声明方式、swagger-codegen 生成嵌套枚举的机制、Jackson 序列化/反序列化行为以及在实际开发中的使用要点。读者将掌握如何在 Swagger 定义中声明枚举、理解生成代码的结构并正确地在 Java 客户端中使用这些枚举类型。EnumTest 模型总览EnumTest是 swagger-codegen 用于测试枚举类型生成的样板模型定义于 Petstore 的 fake伪造端点相关规范中用于验证生成器对各类枚举的覆盖能力。根据文档该模型包含 5 个属性属性类型说明可选性enumStringEnumStringEnum字符串枚举可选optionalenumStringRequiredEnumStringRequiredEnum字符串枚举必填必填enumIntegerEnumIntegerEnum整数枚举可选optionalenumNumberEnumNumberEnum浮点数枚举可选optionalouterEnumOuterEnum独立定义的顶层枚举可选optional其中前四个属性是内嵌在模型中的私有枚举nestled enum而outerEnum引用了在模型外部单独定义top-level schema的OuterEnum。这一区分对应了 Swagger 定义中的两种枚举组织方式直接在属性上以内联enum数组声明以及通过$ref引用独立的枚举 schema。对应的 Swagger/OpenAPI 定义EnumTest的原始定义位于 petstorefake.yamlSwagger 2.0 格式Enum_Test: type: object required: - enum_string_required properties: enum_string: type: string enum: - UPPER - lower - enum_string_required: type: string enum: - UPPER - lower - enum_integer: type: integer format: int32 enum: - 1 - -1 enum_number: type: number format: double enum: - 1.1 - -1.2 outerEnum: $ref: #/definitions/OuterEnumOpenAPI 3.0 版本定义在 petstore3fake.yaml结构基本一致仅引用语法从#/definitions/OuterEnum变为#/components/schemas/OuterEnum。从定义中可以看到几个关键设计点必填属性required列表仅包含enum_string_required这也是唯一没有[optional]标注的属性在生成的 Java 类中对应ApiModelProperty(required true, ...)。空字符串合法值enum_string和enum_string_required都包含空字符串作为合法枚举值这测试了生成器对空值枚举的处理。数值枚举enum_integer使用type: integer枚举整数值enum_number使用type: number枚举浮点值覆盖了除字符串外的基础数据类型。外部引用枚举outerEnum通过$ref引用独立的OuterEnum定义值域为placed/approved/delivered。生成的 Java 源码结构由 swagger-codegen 生成的核心类位于 EnumTest.java包io.swagger.client.model。其核心结构如下五个属性均以JsonProperty注解声明 JSON 字段名如enum_string、enum_integer字段的 Java 类型为嵌套枚举类型或OuterEnum。每个属性提供三件套链式 setter如enumString(EnumStringEnum enumString)返回this便于流式构建、getter、普通 setter并辅以ApiModelProperty注解必填属性带required true。覆盖equals、hashCode基于全部五个字段、toString逐字段输出含缩进格式。内嵌枚举的生成模式以EnumStringEnum为例EnumTest.javapublic enum EnumStringEnum { UPPER(UPPER), LOWER(lower), EMPTY(); private String value; EnumStringEnum(String value) { this.value value; } JsonValue public String getValue() { return value; } Override public String toString() { return String.valueOf(value); } JsonCreator public static EnumStringEnum fromValue(String value) { for (EnumStringEnum b : EnumStringEnum.values()) { if (b.value.equals(value)) { return b; } } return null; } }这是 swagger-codegen 处理枚举的核心模式四个内嵌枚举都遵循相同模板仅常量名与底层类型不同枚举底层 Java 类型常量对应枚举值EnumStringEnumStringUPPER / LOWER / EMPTYUPPER / lower / EnumStringRequiredEnumStringUPPER / LOWER / EMPTYUPPER / lower / EnumIntegerEnumIntegerNUMBER_1 / NUMBER_MINUS_11 / -1EnumNumberEnumDoubleNUMBER_1_DOT_1 / NUMBER_MINUS_1_DOT_21.1 / -1.2注意常量命名规则非法标识符被安全转换——整数1变为NUMBER_1负数-1变为NUMBER_MINUS_1浮点1.1变为NUMBER_1_DOT_1、-1.2变为NUMBER_MINUS_1_DOT_2空字符串变为EMPTY。这些命名是自动生成的确定性结果不依赖运行时信息。Jackson 注解的角色JsonValue标注在getValue()上指示 Jackson 序列化时直接输出枚举的原始值如lower、1、1.1而不是枚举常量名如LOWER。JsonCreator标注在静态工厂fromValue(...)上指示 Jackson 反序列化时用原始值匹配枚举当值不匹配任何枚举成员时返回null。OuterEnum 外部枚举OuterEnum是独立于EnumTest的顶层枚举类见 OuterEnum.java包含PLACED(placed)、APPROVED(approved)、DELIVERED(delivered)三个成员同样带有JsonValue与JsonCreator。其文档见 OuterEnum.md。由于outerEnum在定义中通过$ref引用独立 schema生成器将其实现为独立的顶层枚举类而不是EnumTest的嵌套枚举。枚举值的序列化与反序列化验证仓库自带的单元测试 EnumValueTest.java 对该行为做了完整验证Test public void testEnumTest() { EnumTest enumTest new EnumTest(); enumTest.setEnumString(EnumTest.EnumStringEnum.LOWER); enumTest.setEnumInteger(EnumTest.EnumIntegerEnum.NUMBER_1); enumTest.setEnumNumber(EnumTest.EnumNumberEnum.NUMBER_1_DOT_1); // 枚举 toString 与 getValue 输出原始值 assertEquals(EnumTest.EnumStringEnum.LOWER.toString(), lower); assertEquals(EnumTest.EnumStringEnum.LOWER.getValue(), lower); assertEquals(EnumTest.EnumIntegerEnum.NUMBER_1.toString(), 1); assertEquals(EnumTest.EnumNumberEnum.NUMBER_1_DOT_1.toString(), 1.1); // 序列化对象 JSON ObjectMapper mapper new ObjectMapper(); mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING); String json mapper.writer().writeValueAsString(enumTest); assertEquals(json, {\enum_string\:\lower\,\enum_string_required\:null,\enum_integer\:1,\enum_number\:1.1,\outerEnum\:null}); // 反序列化JSON 对象 EnumTest fromString mapper.readValue(json, EnumTest.class); assertEquals(fromString.getEnumString().toString(), lower); assertEquals(fromString.getEnumInteger().toString(), 1); assertEquals(fromString.getEnumNumber().toString(), 1.1); }该测试验证了几个关键事实输出原始值而非常量名UPPER.toString()与getValue()均返回UPPERNUMBER_MINUS_1返回-1。这是JsonValue与重写toString()共同作用的结果。JSON 中枚举以原始值呈现enum_string序列化为lower而非LOWERenum_integer序列化为数字1而非字符串1未赋值的enum_string_required与outerEnum输出为null。反序列化可还原对象JSON 字符串可无损反序列化为EnumTest枚举成员保持相等。WRITE_ENUMS_USING_TO_STRING的作用测试显式启用了该 Jackson 特性使枚举序列化采用toString()的结果。生成的枚举将toString()重写为返回原始值因此 JSON 输出与getValue()保持一致。另外测试断言了EnumClass含_abc、-efg、(xyz)等带特殊字符的枚举值的转换行为印证常量命名会针对非法 Java 标识符做安全改写。常见问题与使用要点赋值方式必须通过枚举常量赋值如setEnumString(EnumTest.EnumStringEnum.LOWER)而非任意字符串。空字符串枚举的辨识EMPTY常量对应在逻辑上区别于null。反序列化时 JSON 中的会映射为EMPTY而字段缺省或显式null则对应null值。非法值容错fromValue对不匹配的值返回null这意味着反序列化遇到超出枚举值域的输入时不会抛异常而是得到null该行为从源码实现可推断具体容错策略取决于业务侧。Java 类型与 JSON 类型的对应整数枚举在 JSON 中是数字1、-1浮点枚举是小数1.1、-1.2与 Swagger 定义中的type: integer/type: number一一对应客户端序列化时不会加引号。必填语义enum_string_required的ApiModelProperty(required true)来自定义的required列表仅起文档/校验提示作用不强制构造时必传。如何在项目中使用该生成模型使用该客户端的方式与普通 swagger-codegen Java 客户端一致参考 jersey1 样例 README// 构造带枚举字段的模型 EnumTest test new EnumTest() .enumString(EnumTest.EnumStringEnum.LOWER) .enumInteger(EnumTest.EnumIntegerEnum.NUMBER_1) .outerEnum(OuterEnum.APPROVED); // 读取枚举的原始值用于请求参数或落库 String raw test.getEnumString().getValue(); // lower Integer num test.getEnumInteger().getValue(); // 1枚举值最终会经 Jackson 以原始值形式写入请求体服务端按规范中的枚举值域进行校验从而保证客户端与 API 契约严格一致。小结EnumTest是 swagger-codegen 枚举代码生成能力的解剖样本它在一个模型内同时覆盖了字符串、必填字符串、整数、浮点四类内嵌枚举外加一个顶层引用枚举OuterEnum。从 petstorefake.yaml 的定义到 EnumTest.java 的JsonValueJsonCreator生成模式再到 EnumValueTest.java 的序列化往返验证三者共同展示了规范声明 → 代码生成 → 运行验证的完整链路。理解这一模式后无论是阅读生成的客户端代码、排查枚举序列化问题还是自定义生成模板都能更快上手。赞分享开发工具代码生成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 整数枚举生成实战以 Java Jersey1 客户端 Ints 模型为例Swagger Codegen 整数枚举生成实战以 Java Jersey1 客户端 Ints 模型为例 Ints 是 swagger codegen 在 p开发工具代码生成API设计Swagger Codegen Java 客户端枚举模型深度解析以 EnumTest 为例看内联枚举、Gson TypeAdapter 与 Parcelable 代码生成Swagger Codegen Java 客户端枚举模型深度解析以 EnumTest 为例看内联枚举、Gson TypeAdapter 与 Parcelabl开发工具代码生成API设计swagger-codegen Go 客户端中的 EnumTest 模型从 Swagger 枚举定义到生成代码的完整解析swagger codegen Go 客户端中的 EnumTest 模型从 Swagger 枚举定义到生成代码的完整解析 导读 本文以 swagger cod开发工具代码生成API设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

自学网安别瞎找资源!11 年老白帽分享 7 个合法黑客技术学习网站
自学网安别瞎找资源!11 年老白帽分享 7 个合法黑客技术学习网站

很多想自学黑客技术的朋友,很容易走错方向。作为一名11年的资深白帽,给大家推荐7个我自己常用的学习网站,并且都是合法的学习网站,能带你了解到黑客有关的技术,视频,电子书,实践,工具… · 2026/9/23 22:48:28

PaddleNLP SKEP 模型汇总与实战指南:预训练权重、配置详解与下游任务使用
PaddleNLP SKEP 模型汇总与实战指南:预训练权重、配置详解与下游任务使用

人工智能大模型预训练微调LoRARLHF强化学习分布式训练 【免费下载链接】PaddleNLP Easy-to-use and powerful LLM and SLM library with awesome model zoo. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP 点击查看 免费下载 本篇指南以 PaddleNLP 仓库 … · 2026/9/23 22:48:22

在 Laradock 中运行 Tarantool:内存数据库与 Lua 应用服务器的容器化实战指南
在 Laradock 中运行 Tarantool:内存数据库与 Lua 应用服务器的容器化实战指南

后端开发工具DevOps 【免费下载链接】laradock Full PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, Post… · 2026/9/23 22:48:22

中文法律大模型微调实战:从词表扩展到LoRA训练全流程
中文法律大模型微调实战:从词表扩展到LoRA训练全流程

简介:这份资源面向希望将大语言模型落地到中文法律场景的开发者与算法学习者,围绕法律问答、法条理解与指令微调等任务,提供了一套可复现的工程实践材料。包内共42个文件,以Python脚本、JSON配置与数据、Shell运行脚本为主&#x… · 2026/9/23 23:24:05

wired-elements 版本演进全解:从 1.0 到 3.0 的手绘风 Web Components 技术脉络
wired-elements 版本演进全解:从 1.0 到 3.0 的手绘风 Web Components 技术脉络

UI组件前端 【免费下载链接】wired-elements Collection of custom elements that appear hand drawn. Great for wireframes or a fun look. 项目地址: https://gitcode.com/gh_mirrors/wi/wired-elements 点击查看 免费下载 导读 wired-elements 是一个以"… · 2026/9/23 23:24:05

纺锤线与风高浪大线:从形态到实战的K线分歧信号识别
纺锤线与风高浪大线:从形态到实战的K线分歧信号识别

做股票交易的人,几乎都会在某一刻盯着一根K线发呆——实体小到几乎看不见,上下影线却长得像天线,多空双方激烈交手一整天,收盘价却回到开盘价附近。这根线,老交易员叫它纺锤线;如果当天振幅再大一些&#x… · 2026/9/23 23:24:05

AWS SaaS 架构实战:多租户模型选型与租户隔离落地指南
AWS SaaS 架构实战:多租户模型选型与租户隔离落地指南

简介:这份PPT资料面向正在或计划将传统软件转型为SaaS模式的独立软件供应商架构师、技术负责人与云计算从业者,系统梳理了基于AWS构建SaaS平台的整体架构思路与关键技术选型。内容围绕身份管理、多租户隔离、应用分层隔离、管理监控、测量计费、业务敏捷… · 2026/9/23 23:23:59

SAP TM运输模块详解:从架构配置到费用结算的实践指南
SAP TM运输模块详解:从架构配置到费用结算的实践指南

简介:SAP-TM运输模块详解是一份面向SAP实施顾问、SD/物流模块顾问及后勤执行环节业务人员的PDF手册。文档围绕TM作为SD子模块的定位,系统拆解了自动计算交货成本的两大核心任务:创建运输单与计算交货成本,并覆盖从后台配置到前台操… · 2026/9/23 23:23:59

mRemoteNG 端口扫描(Port Scan)完全指南:网段探测、协议识别与批量导入连接
mRemoteNG 端口扫描(Port Scan)完全指南:网段探测、协议识别与批量导入连接

桌面应用网络 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_mirrors/mr/mRemoteNG 点击查看 免费下载 mRemoteNG 内置的 Port S… · 2026/9/23 23:23:52

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码