Доступ к модели Swagger Codegen Vars в шаблоне усов - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь создать свой первый специальный генератор кода с помощью swagger codegen (версия 2.3.1).Моя проблема в том, что я не могу получить доступ к "переменным" модели.Я использую petstore.json образец в качестве входных данных и swagger-codegen-maven-plugin для создания сгенерированных источников.

В моем шаблоне усов я пытаюсь получить доступ к свойствам модели .Это работает для таких свойств, как "className" или "package", но я не могу получить доступ к свойству типа списка "vars".При работе с "-DdebugModels" отображаются переменные, а также "hasVars", как истина.Но в сгенерированном коде переменные не используются, и hasVars кажется ложным.Я упростил свой шаблон, чтобы показать его здесь.Сначала шаблон:

package {{package}};
{{classname}}
{{#vars}}
{{{datatype}}} {{name}} = {{{defaultValue}}}
{{/vars}}
{{#hasVars}}
hasVars
{{/hasVars}}
{{^hasVars}}
has No Vars
{{/hasVars}}

Это вывод для Pet в качестве примера:

package com.dukescripd.demo.model;
Pet
has No Vars

Я начал свой проект с заглушек , сгенерированных codegen ,Это генерирует несколько шаблонов усов, включая один для apis.Этот шаблон использует свойство типа списка «операции», которое работает нормально.

Вот мой CodeGenerator:

package com.dukescript.swagger.codegen;

import io.swagger.codegen.*;

import java.util.*;
import java.io.File;

public class DukescriptswaggercodegenGenerator extends DefaultCodegen implements CodegenConfig {

    protected String sourceFolder = "src";
    protected String apiVersion = "1.0.0";

    public CodegenType getTag() {
        return CodegenType.CLIENT;
    }

    public String getName() {
        return "DukeScriptSwaggerCodegen";
    }

    public String getHelp() {
        return "Generates a DukeScript @Model client library.";
    }

    public DukescriptswaggercodegenGenerator() {
        super();

        outputFolder = "generated-code/DukeScriptSwaggerCodegen";

        modelTemplateFiles.put(
                "model.mustache", 
                "VMD.java");      


        apiTemplateFiles.put(
                "api.mustache", 
                ".java");       

        templateDir = "DukeScriptSwaggerCodegen";

        apiPackage = "io.swagger.client.api";

        modelPackage = "io.swagger.client.model";

        reservedWords = new HashSet<String>(
        );

        additionalProperties.put("apiVersion", apiVersion);

        languageSpecificPrimitives = new HashSet<String>(

        );
    }

    @Override
    public String escapeReservedWord(String name) {
        return "_" + name;  // add an underscore to the name
    }

    public String modelFileFolder() {
        return outputFolder + "/" + sourceFolder + "/" + modelPackage().replace('.', File.separatorChar);
    }

    @Override
    public String apiFileFolder() {
        return outputFolder + "/" + sourceFolder + "/" + apiPackage().replace('.', File.separatorChar);
    }

}

И, наконец, конфигурация codegen-maven-plugin:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.dukescript.demo</groupId>
    <artifactId>swagger-codegen-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <swagger-annotations-version>1.5.21</swagger-annotations-version>
        <jersey-version>2.25.1</jersey-version>
        <jackson-version>2.9.5</jackson-version>
        <jodatime-version>2.7</jodatime-version>
        <maven-plugin-version>1.0.0</maven-plugin-version>
        <junit-version>4.8.1</junit-version>
        <default.package>com.dukescripd.demo</default.package>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>io.swagger</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>src/main/resources/petstore.json</inputSpec>
                            <language>com.dukescript.swagger.codegen.DukescriptswaggercodegenGenerator</language>
                            <output>${project.build.directory}/generated-sources</output>
                            <apiPackage>${default.package}.handler</apiPackage>
                            <modelPackage>${default.package}.model</modelPackage>
                            <invokerPackage>${default.package}.handler</invokerPackage> 
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>io.swagger</groupId>
                        <artifactId>DukeScriptSwaggerCodegen-swagger-codegen</artifactId>
                        <version>1.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>${swagger-annotations-version}</version>
        </dependency>
    </dependencies>
</project>

1 Ответ

0 голосов
/ 23 ноября 2018

В вашем model.mustache добавьте

{{#models}}
{{#model}}

   ...

{{/model}}
{{/models}}

вокруг фрагмента с помощью {{#vars}}.

Пример

...