【问题标题】:swagger-codegen header parameter for Java REST ClientJava REST 客户端的 swagger-codegen 标头参数
【发布时间】:2017-08-20 01:04:07
【问题描述】:

我正在使用 swagger-codegen 为我的一个 REST API 生成 Java REST 客户端。 REST API 采用可选的标头参数。客户端中生成的方法有一个带有标头的附加参数。我希望在方法签名中没有标头参数的情况下生成方法。 我已阅读文档,但找不到任何参考。

例如,对于带有选项 X-CUSTOM-HEADER 参数的 GET all API,swagger-codegen 会生成如下方法:

public List<SomeType> findAllUsingGET1(String optionalHeader)

我希望它在哪里:

public List<SomeType> findAllUsingGET1()

寻找解决方法的指针,而不是自定义客户端代码生成。

编辑 1:添加 JSON 规范

  "get": {
    "summary": "findAll",
    "operationId": "findAllUsingGET1",
    "consumes": [
      "application/json"
    ],
    "produces": [
      "application/json"
    ],
    "parameters": [
      {
        "name": "X-CUSTOM-HEADER",
        "in": "header",
        "description": "Custom Header",
        "required": false,
        "type": "string"
      }
    ],
    "responses": {
      "200": {
        "description": "OK",
        "schema": {
          "type": "string"
        }
      },
      "401": {
        "description": "Unauthorized"
      },
      "403": {
        "description": "Forbidden"
      },
      "404": {
        "description": "Not Found"
      }
    }
  }

【问题讨论】:

  • 您能否将 json/yaml 中被解析为该 GET 的部分包含在内?
  • @moondaisy - 添加了 API 规范的 JSON sn-p。
  • 请详细解释一下为什么您希望在方法签名中没有标头参数的情况下生成方法。如果该参数确实是可选的,那么您可以简单地将其从规范中删除,以便 swagger codegen 不会将其包含在 Java 方法签名中
  • @wing328 - 我希望将标头添加为 REST 调用的标头,而不是将其作为参数传递给方法。所以就像在ApiClient.addDefaultHeader 上设置标题一样。自定义标头实际上不是可选的,它是强制性的。我必须将其更改为可选,这样我就不必在每个方法调用中都传递它。无论如何,如果某些东西是可选的,那并不意味着我们应该从规范中删除它。对吧?

标签: java swagger-codegen


【解决方案1】:

如果您想从 Java API 客户端中的方法签名中删除参数(可选),唯一的方法是从 Swagger/OpenAPI 规范中删除该参数。

要添加默认标题,可以使用ApiClient中的addDefaultHeader方法:https://github.com/swagger-api/swagger-codegen/blob/master/samples/client/petstore/java/okhttp-gson/src/main/java/io/swagger/client/ApiClient.java#L528

UPDATE:标题参数,类似于表单,查询参数,是作为方法参数生成的。从开发者的角度来看,它只是另一个参数(他们不需要知道参数是表头、表单还是查询参数)

【讨论】:

  • 我的问题不是关于删除可选参数,而是关于从方法签名的请求中删除可选标头。我唯一担心的是,为什么 swagger-codegen 将标头请求视为方法参数?
  • 头参数,类似于表单,查询参数,作为方法参数生成。从开发者的角度来看,它只是另一个参数(他们不需要知道参数是表头、表单还是查询参数)
  • 感谢您的最后评论。这澄清了我的问题,并且我得出结论,如果不手动修改 swagger 规范,就无法实现我想要的。您能否用上面的评论更新您的答案,以便我接受它作为答案?
  • 已更新。您也可以通过github.com/swagger-api/swagger-codegen/issues/new 向我们提供反馈
  • @WilliamCheng,我相信 Swagger-codegen 仍然没有这个删除参数的功能。所以我为它创建了这个新请求,并提供了用例信息:github.com/swagger-api/swagger-codegen/issues/7957 请注意这与服务器端接口的代码生成相关。
猜你喜欢
  • 2017-07-15
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 2018-09-27
  • 2018-10-27
  • 1970-01-01
  • 2023-01-10
  • 2016-04-23
相关资源
最近更新 更多