2017-06-06 8 views
2

Ich versuche, Ruhecode für den Frühling mit Prahlerei zu generieren. Derzeit generieren api ist V10Api.java und Controller ist V10ApiController.java. Ich möchte benutzerdefinierte Präfix als 'ReadApi.java' und 'ReadApiController.java' haben.Swagger Codegen - Ändern API und Controller Klassenname

ich an der Lösung sah here dies zu implementieren, so dass mein Code war:

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

es Kompilierungsfehler bei PREFIX gibt so PREFIX ich bin zu raten, nicht in übergeordnete Klasse.

ich die Klasse über toApiName() -Methode geändert:

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"); 
    } 
} 

Wenn lief den Codegenerator als:

${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 \ 
.... 

bekomme ich den Fehler:

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 

Antwort

1

Sie haben zu überschreiben Methode apiFilename - etwas wie das:

@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; 
} 
1

Ich habe es durch Erweitern der SpringCodegen-Klasse und Überschreiben toApiName() -Methode behoben.

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

Funktioniert perfekt. Danke für alle Hinweise.

Verwandte Themen