Как использовать пользовательские шаблоны в Swagger

У меня есть этот словарь 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);

или где-то еще, но с правильным условием, код работал как задумано.

Я оставлю вопрос здесь, возможно, он поможет другим пользователям.


person Gobliins    schedule 30.10.2015    source источник
comment
Я хочу использовать пользовательские шаблоны с Nswagger в ASP .Net Core. Я пробовал много вещей, но это не работает. Вы сделали это в java, но дайте мне знать, если у вас есть какие-либо идеи об этом в .Net Core. Я новичок в Nswagger   -  person Anant Jaiswal    schedule 02.07.2018
comment
У меня нет опыта работы с Nswagger, поэтому я не могу вам помочь. Но документы swagger были обновлены, и если они не помогут, вы можете задать новый вопрос на SO по этой теме (если вы еще этого не сделали).   -  person Gobliins    schedule 02.07.2018


Ответы (2)


Вы можете получить параметры справки для генератора кода, например:

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

Что должно сказать вам, что вы можете переопределить местоположение шаблона с помощью параметра -t:

java -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates
person fehguy    schedule 08.11.2015
comment
я думаю, что делаю это с config.additionalProperties().put(TEMPLATE_DIR_PARAM, templateDirectory); - person Gobliins; 09.11.2015
comment
У меня было неправильное условие в моем коде, поэтому строка для адаптации параметров не выполнялась. Это работает хорошо некоторое время. - person Gobliins; 30.06.2016

Что касается вышеуказанного ava -java swagger-codegen-cli.jar generate -l {language} -t path/to/templates,

Мне удалось заставить его работать с текущим выпуском (2.2.0). С 2.1.6 (текущий GA) не работает.

Я разместил следующее на swagger-codegen в GitHub: https://github.com/swagger-api/swagger-codegen/issues/3188

Хотя внимания не привлек...

person talolier    schedule 30.06.2016
comment
Просто зашел сюда, чтобы упомянуть, что 2.2.0 был выпущен. - person Daryl Teo; 28.07.2016