标签: swagger-codegen

swagger-codegen 文件位置

我在一个项目中使用 swagger-codegen ,最后我问自己一个问题:swagger 文件的位置是否有任何约定?

这是我的情况:
我在我的项目中使用 Maven,所以我有标准的 Maven 结构:

pom.xml
src
|--main
   |--java
   |--resources
   |--webapp
|--test
   |--java
   |--resources
Run Code Online (Sandbox Code Playgroud)

为了使用 Swagger 生成我的 REST API,我必须将 swagger.json、一些 mustache 模板和 .swagger-codegen-ignore 放在某处。我已经把它们(自然地?)放在 src/main/resources 中:

resources
|--api
   |--v2
      |--swagger.json
|--swaggerconfig
   |--api.mustache
   |--[...]
|--.swagger-codegen-ignore
Run Code Online (Sandbox Code Playgroud)

我已经使用适当的 swagger-codegen-maven-plugin 配置了我的 pom.xml 并将打包设置为 war,以便生成我的战争(以便将其部署在 Tomcat 中)。摘录:

[...]
<packaging>war</packaging>
[...]
<build>
  <finalName>my-project</finalName>
  <plugins>
    <plugin>
      <groupId>io.swagger</groupId>
      <artifactId>swagger-codegen-maven-plugin</artifactId>
      <version>2.2.1</version>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>generate</goal>
          </goals>
          <configuration>
            <inputSpec>${basedir}/src/main/resources/api/v2/swagger.json</inputSpec>
            <language>jaxrs</language>
            <templateDirectory>${basedir}/src/main/resources/swaggerconfig</templateDirectory>
            <addCompileSourceRoot>true</addCompileSourceRoot>
            <configOptions>
              <library>jersey2</library>
            </configOptions>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <!-- .swagger-codegen-ignore must be located at …
Run Code Online (Sandbox Code Playgroud)

java maven swagger swagger-codegen

5
推荐指数
0
解决办法
5518
查看次数

如何让 REST 服务为 Java 8 (Local|Offset)DateTime 生成一个简单的字符串(使用 Swagger 时)?

问题:当我们的 REST 服务返回带有日期/日期时间字段的对象时,这些字段被编码为 JSON 格式的复杂结构:

    ...
    "createdTimestamp": {
        "offset": {
            "totalSeconds": 0,
            "id": "Z",
            "rules": {
                "fixedOffset": true,
                "transitionRules": [],
                "transitions": []
            }
        },
        "nano": 257353000,
        "hour": 16,
        "minute": 5,
        "second": 25,
        "month": "OCTOBER",
        "year": 2017,
        "dayOfMonth": 5,
        "dayOfWeek": "THURSDAY",
        "dayOfYear": 278,
        "monthValue": 10
    },
    ...
Run Code Online (Sandbox Code Playgroud)

我希望这些时态数据类型以“2017-10-05T16:05:25”等简单格式序列化为字符串。

该项目最初基于 Java 7 API 并java.util.Date在任何地方使用 - 并且有效。当我切换到 Java 8 并开始使用新java.time类时,除了将日期/时间对象序列化为 JSON 之外,一切正常。

我知道我可以java.util.Date再次使用该类型,但我更喜欢使用新的数据类型。

REST 服务使用 Swagger 定义并使用 Maven 构建。在swagger-codegen-maven-plugin使用时,具有以下配置:

  • 插件版本:2.2.3
  • 语: jaxrs-cxf-cdi
  • 日期库: java8

以下是其他相关库的版本(在 …

java json java-8 swagger swagger-codegen

5
推荐指数
1
解决办法
1755
查看次数

如何将数组或枚举中的枚举值定义为映射属性中的键?

我正在使用 swagger-codegen-maven-plugin (2.2.1) 从 YML 配置生成 java 和 typescript 代码类文件。我有两个问题。

如何在 YML 中定义枚举属性数组?

如何在 YML 中将地图属性枚举定义为键,将布尔值定义为值?

让我知道这可能还是有任何解决方法?目前,我在 java 和 typescrtipt 中定义了枚举类并将其作为字符串传递。谢谢。

DataInfo:
       type: object
       properties:
          enumTest:        -- works fine
            type: string
            enum:
              - one
              - two   
           enumTestArray:   --failing to generate code
              type: array
              items:
                 type: string
                 enum:
                  - one
                   -two  
              testMap:   -- works fines generate Map<String, Boolean> and { [key: string]: boolean; };
                type: object         
                additionalProperties:
                    type: boolean 
Run Code Online (Sandbox Code Playgroud)

招摇枚举文档

地图属性

更新:

与第一个问题相关:定义枚举属性数组。swagger-codegen-maven-plugin 生成无效的 java 类文件,如下所示: 生成 <、> 和 " 字符的外观和问题。 …

api rest yaml swagger-2.0 swagger-codegen

5
推荐指数
1
解决办法
1万
查看次数

Swagger 3.0.0 代码生成失败 java.lang.RuntimeException:缺少 swagger 输入或配置

我正在使用 swagger 指定我的 API 我使用的是 2.0 现在有新版本 3.0.0 根据我使用离线 swagger 编辑器指定 3.0.0 规范的文档。准备好后,我下载了 json 文件,我将使用该文件生成 spring 服务器代码。我下载了swagger-codegen

使用构建它mvn clean package然后我执行了以下命令:

java -jar <PARENT_DIR>/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i <PARENT_DIR>/ServerCode/swagger.json -l spring -o <PARENT_DIR>/ServerCode
Run Code Online (Sandbox Code Playgroud)

上面的命令给了我以下错误:

[main] INFO io.swagger.parser.Swagger20Parser - reading from swagger.json
[main] INFO io.swagger.parser.Swagger20Parser - reading from swagger.json
[main] INFO io.swagger.codegen.ignore.CodegenIgnoreProcessor - No .swagger-codegen-ignore file found.
Exception in thread "main" java.lang.RuntimeException: missing swagger input or config!
        at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:723)
        at io.swagger.codegen.cmd.Generate.run(Generate.java:285)
        at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:35)
Run Code Online (Sandbox Code Playgroud)

更新 :

我的 swagger.json 文件如下(这是我的试验项目,因此我在这里粘贴了我的 api 结构):

{ …
Run Code Online (Sandbox Code Playgroud)

swagger openapi swagger-codegen

5
推荐指数
2
解决办法
7706
查看次数

来自现有 JSON 的 Springfox Swagger Ui

我有一个 gradle 支持的SpringBoot应用程序,我们最初只是在其中创建我们的
REST 控制器,然后使用@EnableSwagger2注释来创建我们的 swagger UI。这工作得很好,但现在我们想过渡到 API 优先的方法。

所以这意味着我们现在正在创建我们的swagger.json第一个,然后swagger-codegen用于生成我们的 Java 接口/控制器以在我们的 SpringBoot 应用程序中使用。我现在正试图弄清楚如何只告诉springfox-swagger-ui使用swagger.json我们创建的,而不是查看 Java 代码以在事后生成 UI。在我看来,这是正确的方法,以避免从本质上springfox-swagger-ui重新生成swagger.json幕后可能引起的任何不一致。

我该如何配置这种行为?谢谢。

java swagger-ui spring-boot springfox swagger-codegen

5
推荐指数
1
解决办法
3048
查看次数

需要将swagger-codegen生成的jar文件发布到maven

我在使用 gradle 插件部署/发布 .jar 生成的 jar 时遇到了一些问题swagger-codegen plugin

我已经看过这个问题,我的需求完全不同,但它的行为是这样的。它正在部署spring-boot应用程序生成的 jar而不是代码生成器。

这是我生成源文件夹的任务:

import io.swagger.codegen.config.CodegenConfigurator
import io.swagger.codegen.DefaultGenerator

def swaggerSourceFile = "${project.rootDir}/build/generated/swagger-json/swagger.json"
def swaggerTargetFolder = 'build/generated/java/src/main/java'
task generateApi {
    inputs.file("$swaggerSourceFile")
    outputs.dir("$projectDir/$swaggerTargetFolder")
    doLast {
        def config = new CodegenConfigurator()
        config.setInputSpec("$swaggerSourceFile")
        config.setOutputDir("$projectDir/$swaggerTargetFolder")
        config.setLang('java')
        config.setAdditionalProperties([
                'apiPackage'   : 'com.xyz.abc.testmanager.controller',
                'modelPackage' : 'com.xyz.abc.testmanager.model',
                'sourceFolder' : swaggerTargetFolder,
                'groupId'      : 'com.xyz.abc',
                "artifactId"   : 'testmanager',
                'pom.version'  : '1.0.' + System.getenv('BUILD_NUMBER')
        ])
        new DefaultGenerator().opts(config.toClientOptInput()).generate()
    }
}

clean.doFirst {
    delete(swaggerTargetFolder)
}

configurations {
    generatedCompile
}

sourceSets { …
Run Code Online (Sandbox Code Playgroud)

spring gradle maven-plugin swagger swagger-codegen

5
推荐指数
0
解决办法
626
查看次数

Swagger客户端codegen不包含可选方法

我正在使用swagger codegen(在这个Zoura swagger上)来创建一个Java/rest模板客户端.我正在使用swagger Gradle插件:

id "org.hidetake.swagger.generator" version "2.11.0"
Run Code Online (Sandbox Code Playgroud)

这是它的配置:

{
  "library": "resttemplate",
  "dateLibrary": "java8",
  "hideGenerationTimestamp": true,
  "modelPackage": "zuora.model",
  "apiPackage": "zuora.api",
  "invokerPackage": "zuora",
  "clientPackage" : "zuora.client"
}
Run Code Online (Sandbox Code Playgroud)

客户端确实生成了,但即使有许多可选字段,它们也不会被创建,并且一切都是必需的.我错过了什么吗?

resttemplate zuora swagger-codegen

5
推荐指数
1
解决办法
655
查看次数

使用 Swagger/OpenAPI 鉴别器,以便 Jackson 正确序列化对象

我们在使用 OpenAPI 2.0 鉴别器时遇到了麻烦,让 Swagger 工具和 Jackson 序列化器都满意。

问题:在序列化期间,Jackson 当前为鉴别器生成两个 JSON 属性,其中之一具有null值。

OpenAPI 2.0 定义

swagger: '2.0'
info:
  version: v1
  title: Error API
paths:
  /errors:
    get:
      description: Stack Overflow test
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/SpecificError'
definitions:
  GeneralError:
    description: Error Base Structure
    type: object
    discriminator: errorType
    properties:
      errorType:
        type: string
      message:
        type: string
    required: 
      - errorType
  SpecificError:
    description: Test
    allOf: 
      - $ref: "#/definitions/GeneralError"
Run Code Online (Sandbox Code Playgroud)

AFAIU 鉴别器被正确定义。规范要求它同时列在propertiesrequired列表中。

使用的属性名称必须在此模式中定义,并且必须在所需的属性列表中。使用时,该值必须是该模式或继承它的任何模式的名称。

Swagger 代码生成器

Swagger Java 代码生成器生成的是: …

jackson swagger openapi swagger-codegen

5
推荐指数
0
解决办法
2263
查看次数

swagger-editor vs swagger-codegen

我是 swagger 的新手,我一直在尝试使用 swagger-editor 开发 api。

Swagger-codegen 表示这是一个开源代码生成器,可以直接从 Swagger 定义的 RESTful API 构建服务器存根和客户端 SDK。

当我使用 swagger-editor 时,我可以看到选项:生成服务器和生成客户端(我在本地运行 swagger-editor)

swagger-codegen 是否具有与 swagger-editor 中的 Generate server 和 Generate Client 相同的功能,或者还有其他功能吗?

提前致谢。

swagger swagger-editor swagger-codegen

5
推荐指数
1
解决办法
1476
查看次数

代码生成默认初始化为空列表而不是空

Swagger 代码生成工具是否可以选择生成的类是否应将 Lists、Maps 等默认为 null 或为空?

以前,默认值为空,例如private List<String> names = new List<String>

目前默认为空,即 private List<String> names = null

更改是在 2017 年 4 月完成的,根据我对所做更改的理解,没有选择使用哪个选项,从那时起它总是默认为 null。

讨论包含了为什么这更好的原因,我不反对。但是我有一个遗留应用程序,它使用了某种形式的(Swagger)生成的源代码,几乎没有修改,我试图摆脱这些,只使用 swagger 生成的模型。问题是代码最初是以没有空值的方式编写的,因此不进行空检查。

那么可以做什么呢?使用以前版本的 Swagger 代码生成器?

API 不在我的控制范围内,因此 yaml 修改不是一个选项(如果这甚至可以提供帮助)。

swagger swagger-codegen

5
推荐指数
1
解决办法
1937
查看次数