繁体   English   中英

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

[英]Generate Java methods from swagger yaml to be used with my own methods

---
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类和方法?

我不确定我遵循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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM