【问题标题】:Swagger codegen - change api and controller class nameSwagger codegen - 更改 api 和控制器类名
【发布时间】:2017-06-06 16:22:41
【问题描述】:

我正在尝试使用 swagger 为 spring 生成 rest 代码。目前生成的api是V10Api.java,控制器是V10ApiController.java。我想要自定义前缀为“ReadApi.java”和“ReadApiController.java”。

我查看了解决方案here 来实现这个,所以我的代码是:

public class ReadApiSpringCodeGen extends SpringCodegen
{
    static {
        PREFIX="Read"; //compile error at PREFIX
    }
}

它在 PREFIX 处给出编译错误,所以我猜 PREFIX 不在超类中。

我将类修改为 toApiName() 方法:

public class ReadApiSpringCodeGen extends SpringCodegen
{
    @Override
    public String toApiName(String name) {
        System.out.println("Name in is ["+name+"]");
        if (name.length() == 0) {
            return "DefaultApi";
        }
        name = sanitizeName(name);
        return camelize(name) + "Read";
    }

   public static void main(String[] args)
   {
       System.out.println("Main called");
   }
}

当运行代码生成器时:

${JAVA_HOME}/bin/java -cp .:./swagger-codegen-cli-2.2.1.jar \
-jar swagger-codegen-cli-2.2.1.jar generate \
    -i Read.yaml \
    -l com.foo.swag.codegen.swagger.ReadApiSpringCodeGen \
....

我得到错误:

Exception in thread "main" java.lang.RuntimeException: Can't load config class with name com.foo.swag.codegen.swagger.ReadApiSpringCodeGen Available: android
ndroid
aspnet5
async-scala
cwiki
csharp
cpprest
.....
at io.swagger.codegen.CodegenConfigLoader.forName(CodegenConfigLoader.java:31)
at io.swagger.codegen.config.CodegenConfigurator.toClientOptInput(CodegenConfigurator.java:353)
at io.swagger.codegen.cmd.Generate.run(Generate.java:221)
at io.swagger.codegen.SwaggerCodegen.main(SwaggerCodegen.java:36)
Caused by: java.lang.ClassNotFoundException: com.foo.swag.codegen.swagger.ReadApiSpringCodeGen
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at io.swagger.codegen.CodegenConfigLoader.forName(CodegenConfigLoader.java:29)
... 3 more

【问题讨论】:

    标签: spring rest swagger


    【解决方案1】:

    你必须重写方法apiFilename - 像这样:

    @Override
    public String apiFilename(final String templateName, final String tag) {
        final String pathWithFile = super.apiFilename(templateName, tag);
        final String pathWithoutFileExtension = pathWithFile.substring(0, pathWithFile.lastIndexOf('.')); //without .java
        final int index = pathWithoutFileExtension.lastIndexOf('.');
        final String className = ".Read" + pathWithoutFileExtension.substring(index+1) + ".java";
        result pathWithoutFileExtension.substring(0, pathWithoutFileExtension.lastIndexOf('.')) + className;
    }
    

    【讨论】:

      【解决方案2】:

      我通过扩展 SpringCodegen 类并覆盖 toApiName() 方法来修复它。

      public class ReadApiSpringCodeGen extends SpringCodegen
      {
          @Override
          public String toApiName(String name) {
              return "CustomReadApi";
          }
      }
      

      完美运行。感谢您提供所有线索。

      【讨论】:

        猜你喜欢
        • 2015-04-09
        • 2020-04-05
        • 2021-10-10
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多