-
Notifications
You must be signed in to change notification settings - Fork 6k
Closed
Labels
Milestone
Description
Thanks swagger api!
I found JavaClientCodegen has a problem.
When i define consumers in yaml, it means send request with the specified Content-Type, but unfortunately, HTTP GET does not works, POST and others works.
Sample yaml:
# Example YAML to get you started quickly.
# Be aware that YAML has indentation based scoping.
# Code completion support is available so start typing for available options.
swagger: '2.0'
# This is your document metadata
info:
version: "0.0.0"
title: <enter your title>
produces:
- application/mycom-v1+json
consumes:
- application/mycom-v1+json
# Describe your paths here
paths:
# This is a path endpoint. Change it.
/persons:
# This is a HTTP operation
get:
# Describe this verb here. Note: you can use markdown
description: |
Gets `Person` objects.
Optional query param of **size** determines
size of returned array
# This is array of GET operation parameters:
parameters:
# An example parameter that is in query and is required
-
name: size
in: query
description: Size of array
required: true
type: number
format: double
# Expected responses for this operation:
responses:
# Response code
200:
description: Successful response
# A schema describing your response object.
# Use JSON Schema format
schema:
title: ArrayOfPersons
type: array
items:
title: Person
type: object
properties:
name:
type: string
single:
type: boolean
Result ClientAPI.java
private ClientResponse getAPIResponse(String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, Object> formParams, String accept, String contentType, String[] authNames) throws ApiException {
if (body != null && !formParams.isEmpty()) {
throw new ApiException(500, "Cannot have body and form params");
}
updateParamsForAuth(authNames, queryParams, headerParams);
final String url = buildUrl(path, queryParams);
Builder builder;
if (accept == null) {
builder = httpClient.resource(url).getRequestBuilder();
} else {
builder = httpClient.resource(url).accept(accept);
}
for (String key : headerParams.keySet()) {
builder = builder.header(key, headerParams.get(key));
}
for (String key : defaultHeaderMap.keySet()) {
if (!headerParams.containsKey(key)) {
builder = builder.header(key, defaultHeaderMap.get(key));
}
}
ClientResponse response = null;
if ("GET".equals(method)) {
response = (ClientResponse) builder.get(ClientResponse.class); //**** did not use contentType
} else if ("POST".equals(method)) {
response = builder.type(contentType).post(ClientResponse.class, serialize(body, contentType, formParams));
} else if ("PUT".equals(method)) {
response = builder.type(contentType).put(ClientResponse.class, serialize(body, contentType, formParams));
} else if ("DELETE".equals(method)) {
response = builder.type(contentType).delete(ClientResponse.class, serialize(body, contentType, formParams));
} else {
throw new ApiException(500, "unknown method type " + method);
}
return response;
}
As you can see above code, contentType is not used for HTTP GET.
When it goes to a spring framework server, the problem occours:
So, the server did right thing, but client did wrong. I need client send Content-Type for HTTP GET.
Would you confirm this problem?