java codegen_Java REST Client的swagger-codegen标头参数

邹星火
2023-12-01

我正在使用swagger-codegen为我的一个REST API生成Java REST客户端。 REST API使用可选的标头参数。客户端中生成的方法具有一个附加参数,该参数采用标头。我希望生成的方法在方法签名中没有header参数。

我已经阅读了文档,但是找不到任何参考。

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

public List findAllUsingGET1(String optionalHeader)

我希望的位置是:

public List 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代码段。

请进一步说明为什么要在方法签名中不使用header参数的情况下生成方法。如果该参数确实是可选的,那么您只需将其从规范中删除,这样就可以在Java方法签名中将其包括在内。

@ wing328-我希望将标头添加为REST调用中的标头,而不是将其作为参数传递给方法。因此,类似于在ApiClient.addDefaultHeader上设置标题。自定义标头实际上不是可选的,它是必需的。我不得不将其更改为可选,以便不必在每个方法调用中都将其传递。无论如何,如果某些东西是可选的,那么这并不意味着我们应该将其从规格中删除。

如果要从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

更新:与表单,查询参数类似的标头参数作为方法参数生成。从开发人员的angular来看,它只是另一个参数(他们不需要知道该参数是标题,表单还是查询参数)

我的问题不是关于删除可选参数,而是关于从方法签名中的请求中删除可选标头。我唯一关心的是,为什么swagger-codegen会将标头请求视为方法参数?

标题参数(类似于表单查询参数)作为方法参数生成。从开发人员的angular来看,它只是另一个参数(他们不需要知道该参数是标题,表单还是查询参数)

感谢您的最后评论。这澄清了我的问题,得出的结论是,如果不手动修改swagger规范,则无法实现我想要的目标。您能否用上面的评论更新您的答案,以便我可以接受它作为答案?

更新。您也可以通过github.com/swagger-api/swagger-codegen/issues/new向我们提供反馈

@WilliamCheng,我相信Swagger-codegen仍然不具备删除参数的功能。因此,我通过提供用例信息创建了这个新请求:github.com/swagger-api/swagger-codegen/issues/7957请注意,这与服务器端接口的代码生成有关。

 类似资料: