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

时间:2015-10-26 20:01:21

标签: java rest swagger

我的情况如下。

我有一个招摇.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项目代码是一个服务器代码。它的注释类似于@RequestMapping中的PetApi.java,还有WebMvcConfiguration.class

我不想拥有服务器存根。我想为petstore REST API建立一个客户端库。

是否有可以为我生成相应客户端库的工具?我应该修改服务器存根,因此它有所有模型,还是应该使用简单的springRestTemplate?

感谢您的回答!

6 个答案:

答案 0 :(得分:13)

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

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,改造1.x& 2.x,okhttp,Feign,RESTEasy,RestTemplate

答案 1 :(得分:11)

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

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

希望它可以帮到你, 亨利

答案 2 :(得分:10)

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

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的其他选项包括:

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

答案 3 :(得分:2)

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

  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 <language> -i <pathOrUrlOfSwaggerSpec>
  3. 更多信息here

答案 4 :(得分:1)

@wing328's answer只是一个愚蠢的扩展。

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

  

不使用带有OpenAPI / Swagger规范的URL的swaggerUrl,   您还可以在规范中包含规范,例如

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

更多信息:Official Doc

答案 5 :(得分:-5)

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