我正在使用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请注意,这与服务器端接口的代码生成有关。