在不跳过规范验证的前提下,使用openapi-generator-maven-plugin复用已有实体类
在不跳过规范验证的前提下,使用openapi-generator-maven-plugin复用已有实体类
我完全懂你的纠结——既想复用已有的Article实体类,又不想关掉OpenAPI规范验证来蒙混过关。其实问题根源出在你的OpenAPI Schema定义上,咱们调整一下规范和插件配置,就能两全其美,不用牺牲验证环节。
问题出在哪?
你当前的OpenAPI spec里,ArticleEntity引用了#/components/schemas/Article,但这个Article在你的规范里根本没定义,所以规范验证环节直接报错,你只能被迫关掉它。要保留验证,首先得让你的spec本身是合法的。
解决步骤
1. 修正OpenAPI规范的Schema定义
把spec里的ArticleEntity改成合法的结构定义,让它和你已有Article类的字段完全匹配。这样规范验证就能通过,同时插件也能正确映射到你的已有类。
修正后的yaml示例:
paths: /article: post: tags: - article summary: Add a new article to the store description: Add a new article to the store operationId: addArticle requestBody: description: Create a new article in the store content: application/json: schema: $ref: '#/components/schemas/ArticleEntity' required: true responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/ArticleEntity' components: schemas: ArticleEntity: type: object properties: # 这里要和你已有Article类的字段一一对应 id: type: integer format: int64 title: type: string content: type: string # 同样,必填字段也要和已有类一致 required: - id - title
2. 调整插件配置(开启验证,去掉跳过设置)
把<skipValidateSpec>true</skipValidateSpec>删掉(默认就是false,即开启规范验证),保留你的importMappings和languageSpecificPrimitives配置——这俩是复用已有类的关键:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.3.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>spring</generatorName> <apiPackage>com.example.openapigenerator.api</apiPackage> <!-- 移除skipValidateSpec,默认开启规范验证 --> <languageSpecificPrimitives>ArticleEntity</languageSpecificPrimitives> <importMappings> ArticleEntity=com.example.openapigenerator.model.Article </importMappings> <modelPackage>com.example.openapigenerator.model</modelPackage> <configOptions> <interfaceOnly>true</interfaceOnly> <useSpringBoot3>true</useSpringBoot3> <legacyDiscriminatorBehavior>false</legacyDiscriminatorBehavior> </configOptions> </configuration> </execution> </executions> </plugin>
关键配置说明
languageSpecificPrimitives:告诉插件ArticleEntity是一个已存在的类型,不需要生成新的模型类。importMappings:把OpenAPI spec里的ArticleEntity直接映射到你本地的com.example.openapigenerator.model.Article类。
这样调整后,OpenAPI规范验证会正常执行(因为你的spec现在是合法的),同时生成的API接口会直接复用你已有的Article类,完全不需要跳过验证环节。
注意事项
要保证spec里ArticleEntity的字段定义、数据类型、必填项和你已有Article类完全一致,否则可能会出现序列化/反序列化异常,或者生成的API代码和实体类不兼容的问题。
备注:内容来源于stack exchange,提问作者A. Sa.
相关产品推荐
相关产品推荐

