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

如何为swagger REST API文档生成java客户端代码,java,rest,swagger,Java,Rest,Swagger,我的情况如下 我大摇大摆。例如: 我想为上面的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生成服

我的情况如下

我大摇大摆。例如: 我想为上面的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

我不想要服务器存根。我想要一个用于PetStoreRESTAPI的客户端库

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


谢谢你的回答

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

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

希望它能帮助你,
Thierry

除了使用JAR,您还可以使用来在线生成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

有关自定义输出的更多选项,请参阅

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


截至2017年7月,Java API客户端生成器支持以下HTTP库:Jersey 1.x和2.x、Reformation 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的其他选项包括:


尽管在GitHub项目中,将swagger转换为Java客户机或服务器代码时,由您决定使用哪个库(jersey、jersey2、okhttp gson等)。使用generator.swagger.io,您还可以。可能还有一个选项,可以选择要使用的库。要考虑的是SWAGRU.IO选项是完全免费的,而RestLead和Apimic是FEMEME.

尽管SiggGER生成器生成java SDK,但是APIMIC SDK的成熟、详细,并且提供了更大的灵活性,让您可以尝试APIMIC SDK生成器,你会喜欢的。

这可能是最快、最简单的方法:

  • wgethttps://oss.sonatype.org/content/repositories/releases/io/swagger/swagger-codegen-cli/2.2.1/swagger-codegen-cli-2.2.1.jar
  • java-jar-swagger-codegen-cli-2.2.1.jar-generate-l-i
  • 更多信息

    只是一个愚蠢的扩展

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

    将-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
    
    回应 发送完整的swagger spec JSON负载而不是URL 而不是将swaggerUrl与OpenAPI/Swagger规范的URL一起使用, 您还可以使用spec将spec包含在JSON负载中,例如

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

    更多信息:

    谢谢您的回答。我无法理解我怎么会错过手册中的这一部分,但这正是我需要的答案。editor.swagger.io使用generator.swagger.io生成API客户端、服务器存根,和API文档。@wing328您是对的,我知道如果您使用swagger codegen项目或在线版本(generator.swagger.io),仍然会产生影响。联机时,您无法选择用于转换的库。您可以。有关如何传递各种选项以自定义输出,请参阅。对于editor.swagger.io,还讨论了添加菜单以自定义输出:感谢您的输入,我相应地更新了我的答案。如果你现在觉得没问题,请随时投票。请澄清一下,宠物店的最终URL是,否则swagger-codegen-cli.jar会抛出一个com.fasterxml.jackson.core.JsonParseExceptionI,我认为这与主题无关。我认为在UNIX系统上使用甚至安装“curl”命令是一个不同的问题。@csikos.balint它是相关的,因为当我尝试时,它导致了证书错误。。。我没有在这里添加旋度的随机选项。
    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"}
    
    {
      "options": {},
      "spec": {
        "swagger": "2.0",
        "info": {
          "version": "1.0.0",
          "title": "Test API"
        },
        ...
      }
    }