从swagger yaml生成Java方法以与我自己的方法一起使用

时间:2019-01-26 20:07:59

标签: java swagger swagger-codegen

---
swagger: "2.0"

definitions:
  Result:
    properties:
      data:
        type: string
        description: Some data result

  Payload:
    properties:
      id:
        required: true
        type: integer
      data:
        required: true
        type: string

生成了Swagger POJO之后,便在类似此类的方法中创建了

 public Result sendMessage(int id, String data) throws IOException {
        return some_clazz.go(
                Result.class,
                new Payload().id(id).data(data)
        );
    }

问题在于我有许多不同的定义,并且我几乎只是在复制模式,因为它们每个都使用通用的some_clazz.go方法(注意:some_clazz使用genetics,因此是第一个arg)。例如:

 public AnotherResult sendMessage(int id) throws IOException {
        return some_clazz.go(
                AnotherResult.class,
                new DifferentPayload().id(id)
        );
    }

是否有一种方法可以使我(或其他方式)从我的定义中生成可以传递给some_clazz.go的类和方法?

1 个答案:

答案 0 :(得分:0)

我不确定我是否遵循some_clazz.go的工作或您想要发送给它的内容。 但是要尝试回答您的问题-您可以扩展swagger-codegen。

为此,您必须通过扩展DefaultCodegen来扩展当前的swagger-codegen,或者更有可能扩展您当前正在使用的Codegen(SpringCodegen,AbstractJavaCodegen等,适用于您的情况)。在新的代码生成类中,您需要添加一个新模板

    public void processOpts() {
        super.processOpts();
        supportingFiles.add(new SupportingFile("someclazzgo.mustache", invokerFolder, "SomeClazzGoImpl.java"));

因此,现在生成器将使用someclazzgo.mustache并根据您创建的模板创建SomeClazzGoImpl.java。实施该模板由您决定。您可以根据需要为每个操作或一个类实现一个方法。也许,如果您提供有关要执行的操作的更多详细信息,我可以给出更具体的示例(每次调用都调用some_clazz.go还是仅特定API?它返回值吗?)

有关如何在https://github.com/swagger-api/swagger-codegen#making-your-own-codegen-modules中扩展代码源的更多详细信息