Skip to content

Commit 141b580

Browse files
committed
Minor improvement to Java API client accept and content-type header
1 parent 095771d commit 141b580

File tree

6 files changed

+271
-93
lines changed

6 files changed

+271
-93
lines changed

modules/swagger-codegen/src/main/resources/Java/api.mustache

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,19 @@ public class {{classname}} {
6464
{{#queryParams}}if ({{paramName}} != null)
6565
queryParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
6666
{{/queryParams}}
67-
{{#headerParams}}headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
68-
{{/headerParams}}
69-
String[] contentTypes = {
70-
{{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}}
67+
68+
final String[] accepts = {
69+
{{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}
7170
};
71+
final String accept = ApiInvoker.selectHeaderAccept(accepts);
7272

73-
String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json";
73+
final String[] contentTypes = {
74+
{{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}
75+
};
76+
final String contentType = ApiInvoker.selectHeaderContentType(contentTypes);
77+
78+
{{#headerParams}}headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
79+
{{/headerParams}}
7480

7581
if(contentType.startsWith("multipart/form-data")) {
7682
boolean hasFields = false;
@@ -92,7 +98,7 @@ public class {{classname}} {
9298
}
9399

94100
try {
95-
String response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType);
101+
String response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, accept, contentType);
96102
if(response != null){
97103
return {{#returnType}}({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class){{/returnType}};
98104
}

modules/swagger-codegen/src/main/resources/Java/apiInvoker.mustache

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.sun.jersey.multipart.FormDataMultiPart;
1616
import javax.ws.rs.core.Response.Status.Family;
1717
import javax.ws.rs.core.MediaType;
1818

19+
import java.util.Arrays;
1920
import java.util.Collection;
2021
import java.util.Map;
2122
import java.util.Map.Entry;
@@ -105,6 +106,31 @@ public class ApiInvoker {
105106
return String.valueOf(param);
106107
}
107108
}
109+
110+
public static String selectHeaderAccept(String[] accepts) {
111+
if (accepts.length == 0) return "application/json";
112+
if (Arrays.asList(accepts).contains("application/json")) return "application/json";
113+
return joinString(accepts, ",");
114+
}
115+
116+
public static String selectHeaderContentType(String[] contentTypes) {
117+
if (contentTypes.length == 0) return "application/json";
118+
if (Arrays.asList(contentTypes).contains("application/json")) return "application/json";
119+
return contentTypes[0];
120+
}
121+
122+
public static String joinString(String[] array, String separator) {
123+
int len = array.length;
124+
if (len == 0) return "";
125+
126+
StringBuilder out = new StringBuilder();
127+
out.append(array[0]);
128+
for (int i = 1; i < len; i++) {
129+
out.append(separator).append(array[i]);
130+
}
131+
return out.toString();
132+
}
133+
108134
public void enableDebug() {
109135
isDebug = true;
110136
}
@@ -163,7 +189,7 @@ public class ApiInvoker {
163189
}
164190
}
165191

166-
public String invokeAPI(String host, String path, String method, Map<String, String> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType) throws ApiException {
192+
public String invokeAPI(String host, String path, String method, Map<String, String> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String accept, String contentType) throws ApiException {
167193
Client client = getClient(host);
168194
169195
StringBuilder b = new StringBuilder();
@@ -180,7 +206,7 @@ public class ApiInvoker {
180206
}
181207
String querystring = b.toString();
182208

183-
Builder builder = client.resource(host + path + querystring).accept("application/json");
209+
Builder builder = client.resource(host + path + querystring).accept(accept);
184210
for(String key : headerParams.keySet()) {
185211
builder = builder.header(key, headerParams.get(key));
186212
}

samples/client/petstore/java/src/main/java/io/swagger/client/ApiInvoker.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import javax.ws.rs.core.Response.Status.Family;
1717
import javax.ws.rs.core.MediaType;
1818

19+
import java.util.Arrays;
1920
import java.util.Collection;
2021
import java.util.Map;
2122
import java.util.Map.Entry;
@@ -105,6 +106,31 @@ public static String parameterToString(Object param) {
105106
return String.valueOf(param);
106107
}
107108
}
109+
110+
public static String selectHeaderAccept(String[] accepts) {
111+
if (accepts.length == 0) return "application/json";
112+
if (Arrays.asList(accepts).contains("application/json")) return "application/json";
113+
return joinString(accepts, ",");
114+
}
115+
116+
public static String selectHeaderContentType(String[] contentTypes) {
117+
if (contentTypes.length == 0) return "application/json";
118+
if (Arrays.asList(contentTypes).contains("application/json")) return "application/json";
119+
return contentTypes[0];
120+
}
121+
122+
public static String joinString(String[] array, String separator) {
123+
int len = array.length;
124+
if (len == 0) return "";
125+
126+
StringBuilder out = new StringBuilder();
127+
out.append(array[0]);
128+
for (int i = 1; i < len; i++) {
129+
out.append(separator).append(array[i]);
130+
}
131+
return out.toString();
132+
}
133+
108134
public void enableDebug() {
109135
isDebug = true;
110136
}
@@ -163,7 +189,7 @@ public static String serialize(Object obj) throws ApiException {
163189
}
164190
}
165191

166-
public String invokeAPI(String host, String path, String method, Map<String, String> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String contentType) throws ApiException {
192+
public String invokeAPI(String host, String path, String method, Map<String, String> queryParams, Object body, Map<String, String> headerParams, Map<String, String> formParams, String accept, String contentType) throws ApiException {
167193
Client client = getClient(host);
168194

169195
StringBuilder b = new StringBuilder();
@@ -180,7 +206,7 @@ public String invokeAPI(String host, String path, String method, Map<String, Str
180206
}
181207
String querystring = b.toString();
182208

183-
Builder builder = client.resource(host + path + querystring).accept("application/json");
209+
Builder builder = client.resource(host + path + querystring).accept(accept);
184210
for(String key : headerParams.keySet()) {
185211
builder = builder.header(key, headerParams.get(key));
186212
}

0 commit comments

Comments
 (0)