当前位置: 首页 > 知识库问答 >
问题:

访问胡须模板中的Swagger codegen模型变量

彭宏深
2023-03-14

我正在尝试使用swagger codegen(版本2.3.1)创建我的第一个自定义代码生成器。我的问题是,我似乎无法访问模型的“变量”。我在用宠物店。json示例作为输入,swagger codegen maven插件用于创建生成的源代码。

在我的小胡子模板中,我试图访问模型属性。这适用于“className”或“package”等属性,但我无法访问列表类型属性“vars”。使用“-DdebugModels”运行时,会显示变量,并且“hasVars”也会报告为true。但是在生成的代码中没有使用变量,“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生成的存根开始了我的项目。这将生成一些小胡子模板,包括一个用于API的模板。此模板使用“操作”列表类型属性,可以正常工作。

这是我的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插件的配置:

<?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个答案

符鸣
2023-03-14

在你的模型中。胡子,加上

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

   ...

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

{{vars}}环绕代码段。

实例

 类似资料:
  • 问题内容: 我正在使用Flask 0.7版。我已经将静态内容的路径存储在配置文件中,并使用 我可以在不通过变量的情况下访问模板中的此配置变量吗? 问题答案: flask默认情况下会在模板上下文中传递一些全局变量(这是完整列表),其中之一是,允许你从模板访问应用程序配置。作为字典,可以使用或(该语法用于访问字典项的语法特定于Jinja)进行访问。

  • 是否可以访问模板中的设置变量? 设置: 如何使用,而不在模板中重用,以避免重复的代码,尤其是在其层次结构较深的情况下?

  • 问题内容: 如果我在Django中设置会话变量,例如: 有什么方法可以从模板中访问它,还是必须从视图中检索它,然后将其传递给模板? 询问是因为我想在模板中访问大约10个小会话变量,然后将所有10个从视图传递到模板可能会有些混乱。 (我必须使用会话变量,因为它是HttpResponseRedirect,但是出于我的目的,将变量存储在数据库中是过大的。) 那么-有什么方法可以直接在模板中获取会话变量?

  • 问题内容: 我的视图代码基本上是这样的: 我想在Django模板中执行的操作是: 我想要这样输出: 但是通过变量名称via对dict的引用实际上不起作用。我怀疑它是在内部而不是在做。有什么办法可以解决此问题? 问题答案: 没有内置的方法可以执行此操作,您需要编写一个简单的模板过滤器才能执行此操作:http : //code.djangoproject.com/ticket/3371

  • 变量通用属性 变量通用属性有title,value,type,tip,rule,message,除了通用属性个别变量还有其它属性,请看每个具体控件; "vars": { "varName1": { "title": "测试 text", /*后台设置时 input 的 label*/ "value": "1", /*变量默认值*/ "type

  • 变量通用属性 变量通用属性有title,value,type,tip,rule,message,除了通用属性个别变量还有其它属性,请看每个具体控件; "vars": { "varName1": { "title": "测试 text", /*后台设置时 input 的 label*/ "value": "1", /*变量默认值*/ "type