[BUG][KOTLIN][Retrofit2] Generator should support optional header parameter
Created by: alitams
Bug Report Checklist
-
Have you provided a full/minimal spec to reproduce the issue? -
Have you validated the input using an OpenAPI validator (example)? -
Have you tested with the latest master to confirm the issue still exists? -
Have you searched for related issues/PRs? -
What's the actual output vs expected output? -
[Optional] Sponsorship to speed up the bug fix or feature request (example)
Description
Header parameters can be optional, like path parameters. See the code below. What I experience, despite of the required attribute is false, it generates the parameter as required. I expect that it should be optional with null default value.
Experienced:
@PUT("verify")
fun verify(@Body verifyRequest: VerifyRequest, @Header("Token") verifyData: String): Single<VerifyResponse>
Expected:
@PUT("verify")
fun verify(@Body verifyRequest: VerifyRequest, @Header("Token") verifyData: String? = null): Single<VerifyResponse>
openapi-generator version
5.0.1
OpenAPI declaration file content or url
/verify:
put:
tags:
- verify
operationId: verifyData
parameters:
- $ref: '#/components/parameters/optionalToken'
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/VerifyRequest"
required: true
responses:
"200":
description: Successfully verifed
content:
application/json:
schema:
$ref: "#/components/schemas/VerifyResponse"
components:
parameters:
optionalToken:
name: Token
in: header
required: false
description: OptionalToken description
schema:
type: string
Suggest a fix
The kotlin-client/libraries/jvm-retrofit2/headerParams.mustache should be changed from this:
{{#isHeaderParam}}@Header("{{baseName}}") {{{paramName}}}: {{{dataType}}}{{/isHeaderParam}}
to this:
{{#isHeaderParam}}@Header("{{baseName}}") {{paramName}}: {{{dataType}}}{{#required}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{/required}}{{^required}}?{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{^defaultValue}} = null{{/defaultValue}}{{/required}}{{/isHeaderParam}}