【问题标题】:How to properly use the server stubs generated from a swagger specification?如何正确使用从 swagger 规范生成的服务器存根?
【发布时间】:2016-12-16 12:57:52
【问题描述】:

我正在使用 Swagger 2.0 和 swagger-codegen(实际上是 Maven 的 swagger-codegen-plugin)来指定、记录和生成 API,以 Java 作为目标语言。

该项目已设置为构建服务器存根 (JAX-RS) 和文档,并且 Eclipse 可以识别项目 buildPath 中生成的代码。

我不确定这里的正确工作流程是什么。 :-/

我认为我不应该修改生成的类,否则每当我更改 swagger 规范时,我的更改都会被覆盖,我希望随着开发的进行,随着我对 API 的更多思考,它会发生变化。

那我该怎么办?从生成的类(哪些?)继承或将它们包含在我自己的类中?

【问题讨论】:

  • 请注意,根据您使用的特定生成器,答案可能会有所不同。您可能希望将特定的生成器模块添加到您的问题中。另外,考虑使用 Java 标签,也许替换“war”标签,这可能不是很有用。
  • 谢谢,@TedEpstein。按建议编辑。

标签: java eclipse maven swagger swagger-codegen


【解决方案1】:

这里的解决方法有两个步骤。

  1. 将 **/*Controller.java 或 **/*Impl.java 添加到 .swagger-codegen-ignore 文件。根据使用的语言,默认实现在 *Controller.java 或 *Impl.java 文件中提供。一旦从生成中排除默认实现,您就可以在自己的类中实现生成的接口。你自己类中的代码不会在 mvn clean 上刷新。

  2. .swagger-codegen-ignore 文件本身是一个自动生成的文件,因此当您执行 mvn clean 时,您在步骤 1 中添加的任何内容都会刷新。为避免这种情况,请将您的 .swagger-codegen-ignore 版本保留在您的资源文件夹中,并将以下插件添加到您的 pom 中,以便在 Maven 生命周期开始时复制该文件:

    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-resources-plugin</artifactId>
    	<executions>
    		<execution>
    			<id>copy-resources</id>
    			<phase>initialize</phase>
    			<goals>
    				<goal>copy-resources</goal>
    			</goals>
    			<configuration>
    				<outputDirectory>${project.build.directory}/generated/swagger</outputDirectory>
    				<resources>
    					<resource>
    						<directory>${basedir}/src/main/resources</directory>
    						<includes>
    							<include>.swagger-codegen-ignore</include>
    						</includes>
    					</resource>
    				</resources>
    			</configuration>
    		</execution>
    	</executions>
    </plugin>

【讨论】:

  • 感谢您的回答!这几乎正​​是我所做的。不同之处在于,我没有避免清理.swagger-codegen-ignore文件,而是将其作为资源添加到项目中,并在构建生命周期开始时将其复制到./target/generated-sources/swagger目录。
  • 执行 mvn clean 时,生成源中的文件不会被删除吗?这应该如何在多个开发人员之间工作?生成的源不应该提交给源代码管理。
【解决方案2】:

我相信您需要更新 Impl 类,例如PetApiServiceImpl.

如果您想在代码重新生成期间跳过某些文件(例如 Impl 类),可以将文件添加到 .swagger-codegen-ignore

【讨论】:

  • 你的意思是我应该覆盖生成的代码吗?当我更改 swagger 规范并重新生成代码时会发生什么?
  • 不,我的意思是你应该把 Impl 类放在 .swagger-codegen-ignore 中,这样这些文件就不会被覆盖,因为你可能已经在 Impl 类中实现了逻辑.
  • 据我了解,.swagger-codegen-ignore 应该放在 generate-sources 目录中。如果我执行mvn clean,该目录将被删除,不是吗?无论如何我可以把它和some-spec.swagger 文件放在一起?
  • 另外,我正在使用 swagger-codegen-maven-plugin。有没有办法可以指定要跳过生成的文件作为插件的配置?
  • 好的,所以 .swagger-codegen-ignore 是在 target\generated-sources\swagger 中自动生成的,我只需要将文件添加到其中,但它似乎不起作用. codegen 生成 2 个 Impl 类。我将其中一个添加到忽略文件中,并在两个文件的开头添加了一些随机行。在mvn compile 之后,两个文件都是全新的。似乎代码生成器覆盖了两者。如果这很重要,我正在使用 swagger-codegen-maven-plugin 2.2.2-SNAPSHOT。
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 2020-12-19
  • 2016-09-30
  • 2016-06-29
  • 1970-01-01
  • 2017-07-08
  • 2020-09-02
  • 2021-07-21
相关资源
最近更新 更多