[英]Swagger autogen - overwriting implementation code
这里有人有处理不断变化的 API 规范的好策略吗?
API 更改 -> 重新生成代码 -> 实施更改。
我正在考虑生成 Java 接口并拥有实现这些接口的单独类文件。 任何接口不匹配都会出现在 IDE 中(例如 IntelliJ)
现在,如果我执行实现,我编写实现的文件将被覆盖......
我生成的 swagger 代码将放在 src/gen/Java 下。 每次我生成整个文件夹都会被删除。 这样接口的实现就不会被覆盖。 我也不提交 gen 文件夹。
编辑
为了更详细地说明它,请查看模板: https : //github.com/Mehtrick/swagger-templates
重要的是 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);
}
}
然后生成的 UsersApi 看起来像这样:
public interface UsersApi {
/**
* Loads the current user
*/
ResponseEntity<User> getCurrentUser() throws Exception;
/**
* Registers a new user
*/
ResponseEntity<Void> registerUser(@Valid @RequestBody User body) throws Exception;
}
我所要做的就是将生成的api接口实现为spring组件。
这些类是使用这个 gradle 插件从 Swagger 生成的:
https://github.com/int128/gradle-swagger-generator-plugin
构建配置如下所示:
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")
}
在这个例子中,使用了普通的 spring-swagger- ${projectDir}/swagger/templates
但我在${projectDir}/swagger/templates
下使用了我的自定义${projectDir}/swagger/templates
构建脚本被配置为将生成的文件移动到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"
}
构建任务在以下情况下被调用:
compileJava.dependsOn swaggerGen
希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.