如何为swagger REST API文档生成Java客户端代码

我的方案如下。

我有一个招摇.json例如: http : //petstore.swagger.io/v2/swagger.json我想为上面的REST API使用生成的java客户端,例如:

PetApi petApi = new PetApi(); Pet pet = new Pet; pet.setName("cica"); pet.setId(1L); petApi.addPet(pet); System.out.println(petApi.getById(1L));` 

Expexted输出: cica和新宠物根据REST API实现存储。

我已使用以下命令为petstore成功生成服务器存根:

 java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i http://petstore.swagger.io/v2/swagger.json -l spring-mvc -o samples/server/petstore/spring-mvc 

但是这个maven项目代码是一个服务器代码。 它有注释,如PetApi.java @RequestMapping ,还有一个WebMvcConfiguration.class

我不想拥有服务器存根。 我想拥有petstore REST API的客户端库。

有没有可以为我生成适当的客户端库的工具? 我应该修改服务器存根,因此它有所有模型或者我应该使用简单的springRestTemplate吗?

谢谢你的答案!

我认为你没有为Swagger Codegen的参数-l使用正确的值(你使用spring-mvc这是一种服务器端技术)。 您可以尝试使用值java

您还可以注意到有一个工具,即Restlet Studio ,它允许从Swagger内容生成代码。 对于Java,它主要依赖于Restlet框架,但我认为它可以满足您的需求。

希望它对你有帮助,蒂埃里

您也可以使用https://generator.swagger.io在线生成SDK(Java,Ruby,PHP等)而无需安装任何内容,而不是使用JAR。 这是一个例子:

 curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java 

这是一个示例响应:

 {"code":"1445940806041","link":"https://generator.swagger.io/api/gen/download/1445940806041"} 

然后,您可以从链接下载压缩的SDK。

有关自定义https://generator.swagger.io输出的更多选项,请参阅https://github.com/swagger-api/swagger-codegen#online-generators

(Swagger Generator是Swagger Codegen项目(免费,开源)的一部分,您可以运行本地Swagger生成器)

截至2017年7月,Java API客户端生成器支持以下HTTP库:Jersey 1.x和2.x,Retrofit 1.x&2.x,okhttp,Feign,RESTEasy,RestTemplate

对于您的场景,您的命令应该如下所示

 java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i http://petstore.swagger.io/v2/swagger.json -l java -o samples/server/petstore/spring-mvc 

将swagger转换为jave的其他选项有:

  • 招摇,代码生成
  • generator.swagger.io
  • editor.swagger.io
  • 的Restlet
  • APIMATIC

虽然使用GitHub项目,您可以决定在将swagger转换为Java客户端或服务器代码时使用哪个库(jersey,jersey2,okhttp-gson等)。 使用generator.swagger.io,您还可以决定使用哪个库 。 editor.swagger.io可能有一个增强function,可以选择要使用的库。 要考虑的是swagger.io选项是完全免费的,而Restlet和APIMATIC是免费的。

可能是最快速,最简单的方法:

  1. wget https://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
  2. java -jar swagger-codegen-cli-2.2.1.jar generate -l -i

更多信息在这里

只是对@ wing328的答案的愚蠢扩展。

 curl -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java 

如果导致此错误(SSL证书问题)

 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.haxx.se/docs/sslcerts.html 

添加-k开关以curl。 例:

 curl -k -X POST -H "content-type:application/json" -d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' https://generator.swagger.io/api/gen/clients/java 

响应

 {"code":"7e542952-5385-4e34-8cf6-6196722fb18b","link":"https://generator.swagger.io/api/gen/download/7e542952-5385-4e34-8cf6-6196722fb18b"} 

发送完整的swagger规范JSON有效负载而不是URL

您可以使用规范在JSON有效负载中包含规范,而不是使用swaggerUrl和OpenAPI / Swagger规范的URL。

 { "options": {}, "spec": { "swagger": "2.0", "info": { "version": "1.0.0", "title": "Test API" }, ... } } 

更多信息: 官方文件

虽然swagger生成器生成了一个Java SDK,但是APIMATIC sdk非常成熟,详细,并且提供了Swagger Gen的更多灵活性。你应该尝试使用API​​MATIC sdk生成器,你会喜欢它。