Minor improvement to Java API client accept and content-type header

This commit is contained in:
xhh
2015-05-24 08:51:08 +08:00
parent 095771d345
commit 141b580c8c
6 changed files with 273 additions and 95 deletions

View File

@@ -64,13 +64,19 @@ public class {{classname}} {
{{#queryParams}}if ({{paramName}} != null)
queryParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
{{/queryParams}}
final String[] accepts = {
{{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}}
};
final String accept = ApiInvoker.selectHeaderAccept(accepts);
final String[] contentTypes = {
{{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}}
};
final String contentType = ApiInvoker.selectHeaderContentType(contentTypes);
{{#headerParams}}headerParams.put("{{baseName}}", ApiInvoker.parameterToString({{paramName}}));
{{/headerParams}}
String[] contentTypes = {
{{#consumes}}"{{mediaType}}"{{#hasMore}},{{/hasMore}}{{/consumes}}
};
String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json";
if(contentType.startsWith("multipart/form-data")) {
boolean hasFields = false;
@@ -92,7 +98,7 @@ public class {{classname}} {
}
try {
String response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, contentType);
String response = apiInvoker.invokeAPI(basePath, path, "{{httpMethod}}", queryParams, postBody, headerParams, formParams, accept, contentType);
if(response != null){
return {{#returnType}}({{{returnType}}}) ApiInvoker.deserialize(response, "{{returnContainer}}", {{returnBaseType}}.class){{/returnType}};
}

View File

@@ -16,6 +16,7 @@ import com.sun.jersey.multipart.FormDataMultiPart;
import javax.ws.rs.core.Response.Status.Family;
import javax.ws.rs.core.MediaType;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
@@ -105,6 +106,31 @@ public class ApiInvoker {
return String.valueOf(param);
}
}
public static String selectHeaderAccept(String[] accepts) {
if (accepts.length == 0) return "application/json";
if (Arrays.asList(accepts).contains("application/json")) return "application/json";
return joinString(accepts, ",");
}
public static String selectHeaderContentType(String[] contentTypes) {
if (contentTypes.length == 0) return "application/json";
if (Arrays.asList(contentTypes).contains("application/json")) return "application/json";
return contentTypes[0];
}
public static String joinString(String[] array, String separator) {
int len = array.length;
if (len == 0) return "";
StringBuilder out = new StringBuilder();
out.append(array[0]);
for (int i = 1; i < len; i++) {
out.append(separator).append(array[i]);
}
return out.toString();
}
public void enableDebug() {
isDebug = true;
}
@@ -163,7 +189,7 @@ public class ApiInvoker {
}
}
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 {
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 {
Client client = getClient(host);
StringBuilder b = new StringBuilder();
@@ -180,7 +206,7 @@ public class ApiInvoker {
}
String querystring = b.toString();
Builder builder = client.resource(host + path + querystring).accept("application/json");
Builder builder = client.resource(host + path + querystring).accept(accept);
for(String key : headerParams.keySet()) {
builder = builder.header(key, headerParams.get(key));
}