swagger-inflector 及其对 x-swagger-router-controller 和 x-swagger-router-model 的使用

swagger-inflector and its use of x-swagger-router-controller and x-swagger-router-model

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

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

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

这是一个例子:

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 的模型 class。如果在 inflector.yaml 中没有指定 modelPackage,我会在默认包 (io/swagger/...) 中创建一个名为 SomeObject 的模型 class。在这两种情况下生成的模型 class 名称是 SomeObject.java

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

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

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