【问题标题】:How to use custom templates in Swagger如何在 Swagger 中使用自定义模板
【发布时间】:2015-10-30 12:53:47
【问题描述】:

我的模板中有这个 JavaJaxRs 字典:

/templates/JavaJaxRs

我编辑了其中的一些。并希望将它们用于我的 API 生成(代码的灵感来自 https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen-maven-plugin/src/main/java/io/swagger/codegen/plugin/CodeGenMojo.java 的这种方法):

    System.out.println("Generating API for: " + location);
    DefaultGenerator generator = new DefaultGenerator();
    Swagger swagger = new SwaggerParser().read(location);
    CodegenConfig config = CodegenConfigLoader.forName(this.language);
    config.setOutputDir(new File(this.apiGeneratedSrcPath).getPath());

    if (null != templateDirectory) {
        config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);
    }
    if (null != modelPackage) {
        config.additionalProperties().put(MODEL_PACKAGE_PARAM, modelPackage);
    }
    if (null != apiPackage) {
        config.additionalProperties().put(API_PACKAGE_PARAM, apiPackage);
    }
    if (null != invokerPackage) {
        config.additionalProperties().put(INVOKER_PACKAGE_PARAM, invokerPackage);
    }

    if (configOptions != null) {
        for (CliOption langCliOption : config.cliOptions()) {
            if (configOptions.containsKey(langCliOption.getOpt())) {
                config.additionalProperties().put(langCliOption.getOpt(),
                        configOptions.get(langCliOption.getOpt()));
            }
        }
    }

    if (null != configurationFile) {
        Config genConfig = ConfigParser.read(configurationFile);
        if (null != genConfig) {
            for (CliOption langCliOption : config.cliOptions()) {
                if (genConfig.hasOption(langCliOption.getOpt())) {
                    config.additionalProperties().put(langCliOption.getOpt(), genConfig.getOption(langCliOption.getOpt()));
                }
            }
        } else {
            throw new RuntimeException("Unable to read configuration file");
        }
    }

    ClientOptInput input = new ClientOptInput().opts(new ClientOpts()).swagger(swagger);
    input.setConfig(config);

    generator.opts(input).generate();

不知何故,我总是得到使用标准模板文件生成的代码。

更新:

当我没记错时,我有一个条件错误:

if(null != templateDirectory)
    config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);

或其他地方,但条件正确,代码按预期工作。

我把问题留在这里,也许它会帮助其他一些用户。

【问题讨论】:

  • 我想在 ASP .Net Core 中使用带有 Nswagger 的自定义模板。我已经尝试了很多东西,但它不起作用。您已经在 java 中完成了此操作,但如果您在 .Net Core 中对此有任何想法,请告诉我。我是 Nswagger 的新手
  • 我没有使用 Nswagger 的经验,所以我无法帮助您。但是招摇的文档已经更新,如果这些没有帮助,您可以就这个主题提出一个关于 SO 的新问题(如果您还没有)。

标签: java mustache swagger


【解决方案1】:

您可以像这样获得代码生成器的帮助选项:

java -jar swagger-codegen-cli.jar help generate

这应该告诉您可以使用-t 参数覆盖模板位置:

java -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates

【讨论】:

  • 我想我正在和config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory);一起做这个
  • 我的代码中出现了错误的情况,因此调整参数 wsa 的行没有执行。一段时间以来,它一直运行良好。
【解决方案2】:

关于上述ava -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates

我已经设法使它与当前正在工作的版本 (2.2.0) 一起工作。 对于 2.1.6(当前 GA),它不起作用。

我在 GitHub 的 swagger-codegen 上发布了以下内容: https://github.com/swagger-api/swagger-codegen/issues/3188

虽然没有引起任何注意......

【讨论】:

  • 刚来这里说2.2.0已经发布了。
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 2017-04-30
  • 2016-09-09
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多