Java 大摇大摆自动生成-覆盖实现代码

Java 大摇大摆自动生成-覆盖实现代码,java,spring,swagger,swagger-codegen,Java,Spring,Swagger,Swagger Codegen,这里有没有人有很好的策略来应对不断变化的API规范 API更改->重新生成代码->实现更改 我正在考虑生成Java接口,并使用单独的类文件来实现这些接口。任何接口不匹配都将显示在IDE中(例如IntelliJ) 现在如果我执行实现,我编写实现的文件将被覆盖…我生成的招摇过市代码将放在src/gen/Java下。每次生成时,整个文件夹都将被删除。这样,接口的实现就不会被覆盖。此外,我不提交gen文件夹 编辑 为了进一步说明,请看一下模板: 重要的是api和apicontroller.mustach

这里有没有人有很好的策略来应对不断变化的API规范

API更改->重新生成代码->实现更改

我正在考虑生成Java接口,并使用单独的类文件来实现这些接口。任何接口不匹配都将显示在IDE中(例如IntelliJ)


现在如果我执行实现,我编写实现的文件将被覆盖…

我生成的招摇过市代码将放在src/gen/Java下。每次生成时,整个文件夹都将被删除。这样,接口的实现就不会被覆盖。此外,我不提交gen文件夹

编辑

为了进一步说明,请看一下模板:

重要的是api和apicontroller.mustache

生成的控制器类如下所示

@RestController
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Throwable.class)
public class UsersApiController {

    @Autowired
    private UsersApi UsersApiService;

    @PreAuthorize("isAuthenticated()  and hasAuthority('USER')")
    @RequestMapping(value = "/users/current", produces = { "application/json" }, method = RequestMethod.GET)
    public ResponseEntity<User> getCurrentUser() throws Exception {
        return UsersApiService.getCurrentUser();
    }

    @RequestMapping(value = "/users", produces = { "application/json" }, method = RequestMethod.POST)
    public ResponseEntity<Void> registerUser(

            @Valid @RequestBody User body

    ) throws Exception {
        return UsersApiService.registerUser(body);
    }

}
在本例中,使用了普通的spring-swagger-codegen,但与我在
${projectDir}/swagger/templates

buildscript被配置为将生成的文件移动到
src/gen/java
,然后删除整个
src/gen/java
文件夹

task cleanSwagger(type: Delete){
  delete "${projectDir}/src/gen/java/"
}

task moveSwagger(type: Copy){
  dependsOn "generateSwaggerCode"
  from "${buildDir}/swagger-code/src/main/java"
  into "${projectDir}/src/gen/java"
}
在以下情况下调用生成任务:

  • java代码可以编译(就像在ci服务器上一样)
  • IDE类路径(在我的例子中是Eclipse)已初始化
compileJava.dependsOn-swaggerGen


希望这有帮助

您是否手动复制并粘贴所有实现?我的API规范很长。。。您是否实现过由swagger codegen生成的接口?我对模板进行了一些重构。API控制器仅调用注入控制器中的API接口。这样,我只需要将API接口实现为spring组件。我使用gradle插件生成swagger。plguin提供配置发电机输出的选项。所以一切都是自动发生的这听起来像是我需要做的。您是如何设置此工作流的?
ext {
    swaggeryaml = file("${projectDir}/swagger/swagger.yaml")
}

apply plugin: "org.hidetake.swagger.generator"

validateSwagger {
  inputFile = swaggeryaml
}


generateSwaggerCode {
  language = 'spring'
  inputFile = swaggeryaml
  components = ['models','apis']
  configFile = file("${swaggerconfigpath}")
  templateDir = file("${projectDir}/swagger/templates")
}
task cleanSwagger(type: Delete){
  delete "${projectDir}/src/gen/java/"
}

task moveSwagger(type: Copy){
  dependsOn "generateSwaggerCode"
  from "${buildDir}/swagger-code/src/main/java"
  into "${projectDir}/src/gen/java"
}