Swagger Codegen use existing class

后端 未结 3 2177
醉酒成梦
醉酒成梦 2021-02-15 16:06

How can I get the swagger codegen to use an existing class instead of creating a new class? Is this possible? For instance I want to use org.springframework.data.domain.Pa

相关标签:
3条回答
  • 2021-02-15 16:18

    You could use --import-mappings, as it is explained here:

    Sometimes you don't want a model generated. In this case, you can simply specify an import mapping to tell the codegen what not to create. When doing this, every location that references a specific model will refer back to your classes.

    You call this on swagger-codegen-cli generate, with the example you included it would be

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

    Although importMappings hasn't been included in the general configuration parameters here if you look at the code here you can see it's a List<String>. I haven't used it with the maven plugin but looking at the doc and the code I'm guessing this should work:

    <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> 
    

    But this was recently changed, so it might be different if you're using an older version of the plugin. Before that changed it seems to be like this:

    <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>
    

    According to the comment in that commit the old version should be supported too, but I haven't tried any of this so let me know if it works.

    0 讨论(0)
  • 2021-02-15 16:19

    None of the answers mentioned here talked about what to add to the swagger yaml file, in case someone is interested this is something that worked for me:

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

    and then have this in the pom

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

    0 讨论(0)
  • 2021-02-15 16:28

    It's not always possible to use --import-mappings if you have long list of mappings. (At least in case of Windows, which has size-limit for string in command prompt.) That is why better way do it: use mapping with swagger configuration file. (And this option is not fully documented.)

    Like that:

    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"
      }
    }
    
    0 讨论(0)
提交回复
热议问题