Spring Boot跨微服务共享OpenAPI Generator生成的POJO方案
解决跨微服务OpenAPI模型共享的方案
方案一:抽离共享模型到独立模块
- 把
fooPojo1这类跨服务共用的模型单独拎出来,创建一个独立的Gradle模块(比如命名为shared-openapi-models) - 在这个模块里维护对应的OpenAPI YAML片段,通过
gradle openApiGenerate生成POJO后,发布到内部仓库或者作为本地模块供Foo和Bar依赖 - Foo和Bar直接引入这个共享模块,两边使用的是同一个
fooPojo1类,无需重复定义,也省去了对象映射的步骤 - 在Bar的OpenAPI YAML里,直接指定使用共享模块的类,比如用
x-java-type: com.shared.models.FooPojo1(不同生成插件的语法略有差异,比如openapi-generator可能用x-class)
方案二:使用OpenAPI本地/远程引用+生成配置
- 不想抽离模块的话,在Bar的OpenAPI YAML里直接引用Foo的OpenAPI文档中的
fooPojo1定义,本地引用示例:
若Foo的OpenAPI文档能被构建环境访问,也可用远程地址引用:components: schemas: FooPojo1: $ref: '../foo-service/src/main/resources/openapi/foo-api.yaml#/components/schemas/FooPojo1'$ref: 'http://foo-service/docs/openapi.yaml#/components/schemas/FooPojo1' - 配置Bar的
gradle openApiGenerate任务,开启引用解析参数,以openapi-generator插件为例:openApiGenerate { generatorName = "java" inputSpec = "$rootDir/src/main/resources/openapi/bar-api.yaml" outputDir = "$buildDir/generated/openapi" configOptions = [ resolveFullInputSpec: "true" // 开启引用解析 ] } - 这样生成Bar的POJO时,会直接复用Foo的
fooPojo1定义,不会重复生成新类
方案三:自定义生成器扩展(进阶)
- 如果使用SpringDoc这类框架,或者有自定义的生成逻辑,可以编写扩展插件,从Foo已生成的POJO反向生成OpenAPI Schema引用
- 在Bar的代码中,通过
@Schema(implementation = FooPojo1.class)指定复用已有的类,生成OpenAPI文档时会直接使用该类的定义,无需重新生成POJO
内容的提问来源于stack exchange,提问作者InvasiveFiber97
相关产品推荐
相关产品推荐

