【问题标题】:swagger-inflector and its use of x-swagger-router-controller and x-swagger-router-modelswagger-inflector 及其对 x-swagger-router-controller 和 x-swagger-router-model 的使用
【发布时间】:2016-01-07 15:08:21
【问题描述】:

我正在使用 swagger-inflector 来设计 API。我正在尝试使用文档中指定的 x-swagger-router-controller 和 x-swagger-router-model,但它没有按指定工作。

按照我阅读文档的方式,如果该类不存在,这些供应商扩展应该创建该类,然后创建一个以“operationId”命名的方法。但是,它们不能按规定工作。 (我查看了我认为应该处理这个供应商扩展的代码,看起来应该处理扩展,但是没有按预期创建类。好吧,x-swagger-router-model 生成了所需的类名称,但不是所需的包)。

如果我使用 inflector.yaml 文件并指定 modelPackage 和 controllerPackage,则会在这些包中创建类,但我需要更精细地控制用于生成的类的包。 是我做错了什么,还是坏了?

这是一个例子:

definitions:
  SomeObject:
    type: object
    x-swagger-router-model: com.example.api.dto.SomeObjectDTO
...
paths:
  /mypath:
    x-swagger-router-controller: com.example.api.controller.subpkg1.MyController
    get:
      ...

从上面的例子

我没有在 com/example/api/dto 中创建名为 SomeObjectDTO 的模型类。如果在 inflector.yaml 中没有指定 modelPackage,我会在默认包 (io/swagger/...) 中创建一个名为 SomeObject 的模型类。两种情况下生成的模型类名都是 SomeObject.java

我没有在 com/example/api/controller/subpkg1 中创建名为 MyController 的控制器类。如果在 inflector.yaml 中没有指定 controllerPackage,我会在默认包 (io/swagger/...) 中创建一个名为“MyPathController”的控制器类。在这两种情况下生成的控制器类都是 MyPathController.java。

看起来这是一个错误,或者我遗漏了一些非常明显的东西。这里有什么指点吗?

【问题讨论】:

    标签: swagger swagger-maven-plugin


    【解决方案1】:

    swagger-inflector 代码不会为您生成模型——它将尝试连接路由信息(通过 x-swagger-router-model)或通过modelPackage + 模式名称。如果该模型无法在类加载器中加载,它将将此模型视为所有输入(put/post)方法的杰克逊JsonNode

    【讨论】:

    • 谢谢解答。x-swagger-router-controller和controllerPackage是一样的吗?
    • 正确,如果控制器不存在,它们将被模拟。如果您通过 swagger-editor / generate server / inflector 获取最新的,您可以从 /debug.json 端点看到缺少的控制器。见github.com/swagger-api/swagger-inflector#development-lifecycle
    猜你喜欢
    • 2020-10-09
    • 2015-08-03
    • 2020-10-18
    • 1970-01-01
    • 2020-02-26
    • 2023-04-08
    • 2016-03-16
    • 2019-04-24
    • 2022-06-14
    相关资源
    最近更新 更多