Swagger Codegen使用现有的类

时间:2017-06-18 05:40:57

标签: swagger-codegen

如何让swagger codegen使用现有的类而不是创建新的类?这可能吗?例如,我想使用org.springframework.data.domain.Page而不是swagger创建另一个页面类。

3 个答案:

答案 0 :(得分:6)

您可以使用--import-mappings,因为它解释为here

  

有时您不希望生成模型。在这种情况下,你可以   只需指定一个导入映射来告诉codegen什么不是   创建。执行此操作时,每个引用特定位置的位置   model将返回您的课程。

您在swagger-codegen-cli generate上调用此内容,其中包含的示例为

--import-mappings Page=org.springframework.data.domain.Page

如果查看代码here,虽然importMappings未包含在常规配置参数here中,但您可以看到它是List<String>。 我没有在maven插件中使用它,但是查看doc和代码我猜这应该有用:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.2.2-SNAPSHOT</version>
    <executions>
        <execution>
            ...
            <configuration>
                ...
                <importMappings>
                   <importMapping>Page=org.springframework.data.domain.Page</importMapping>
                </importMappings>
            </configuration>
        </execution>
    </executions>
</plugin> 

但这是recently changed,所以如果您使用旧版本的插件可能会有所不同。在此之前,它似乎是这样的:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.2.2-SNAPSHOT</version>
    <executions>
        <execution>
            ...
            <configuration>
                ...
                <configOptions>
                   <import-mappings>Page=org.springframework.data.domain.Page;Some=org.example.Some</import-mappings>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

根据该提交中的评论,旧版本也应该受到支持,但我还没有尝试过任何一个,所以请告诉我它是否有效。

答案 1 :(得分:2)

这里提到的所有答案都没有谈到要添加到摇摇欲坠的yaml文件中的内容, 如果有人感兴趣,这对我有用:

DisplayProperty:  
  type: object
  properties:
    name:
      type: string
    displayName:
      $ref: '#/components/schemas/Text'
    isRequired:
      type: boolean
      example: false
Text:
    type: object

然后将其放入pom

<importMappings>
<importMapping>Text=com.--.--.--.--.Text</importMapping>

答案 2 :(得分:0)

如果你有很长的映射列表,并不总是可以使用--import-mappings。 (至少在Windows的情况下,在命令提示符下对字符串有大小限制。) 这就是更好的方法:使用swagger配置文件进行映射。 (此选项未完整记录。)

就像那样:

java -jar swagger-codegen-cli-2.3.1.jar generate -i myspec.yaml -l java -c myconfig.json

myconfig.json:

{
  "hideGenerationTimestamp": true,
  "dateLibrary": "java8",
  "useRuntimeException": true,
  "modelPackage": "org.my.package.model",
  "apiPackage": "org.my.package.api",
  "importMappings": {
    "Page": "org.springframework.data.domain.Page",
    "MySuperType": "org.my.SuperType"
  }
}