I’m trying to generate client from yaml that contains
acceptParam: name: Accept type: string required: true in: header description: Accepted Content-type. Should be set to application/json contentTypeParam: name: Content-Type type: string required: true in: header description: Request Content-type. Should be set to application/json
That means, accept
and contentType
will be present in generated method signature.
On top of that, I’v configured plugin like this
<plugin> <groupId>io.swagger.codegen.v3</groupId> <artifactId>swagger-codegen-maven-plugin</artifactId> <version>3.0.18</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <phase>generate-sources</phase> <configuration> <inputSpec>${project.basedir}/src/main/resources/swagger.yaml</inputSpec> <language>java</language> <configOptions> <dateLibrary>joda</dateLibrary> <localVarPrefix>localVar</localVarPrefix> </configOptions> <library>resttemplate</library> <output>${project.build.directory}/generated-sources</output> <modelPackage>com.example.client.model</modelPackage> <apiPackage>com.example.client.api</apiPackage> <generateApiTests>false</generateApiTests> <generateModelTests>false</generateModelTests> </configuration> </execution> </executions> </plugin>
Still, after mvn clean install
I’m getting
Error:(130,31) java: variable accept is already defined in method
And generated code contains
public Response authorize(Request body, String accept, ...) { .... final List<MediaType> accept = apiClient.selectHeaderAccept(accepts); .... }
I’v tried different versions of plugin (from 2.3.0 up to newest one), after overcoming lots of other issues, I’m always ending up like this.
Advertisement
Answer
In OpenAPI 2.0, the Accept
and Content-Type
headers should be defined using consumes
and produces
rather than parameters. In OpenAPI 3.0, these headers are defined as request/response media types.
Change your operation definition as follows:
swagger: '2.0' paths: /foo: post: consumes: - application/json produces: - application/json ...
or if you use OpenAPI 3.0:
openapi: 3.0.0 paths: /foo: post: requestBody: content: application/json: # <---- schema: ... responses: '200': description: ok content: application/json: # <---- schema: ...