私はJava EEクライアントを作成しています。ここでは、応答を得るためにノード(js)サーバーを呼び出す必要があります。そこで私はノード・サーバーに対して要求を行うための単一のクラスを作成しました。 私は応答を得るたびに、応答コードと応答自体を返信する必要があります。だから私はレスポンスコードと応答を含む文字列配列を作成することを考えました。Map <Integer、String>またはString []?
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.client.filter.LoggingFilter;
import com.sun.jersey.core.impl.provider.entity.StringProvider;
public class RequestHandler {
/**
* Makes a HTTP Request for a given url. The type
* determines which type of request, post or get,
* will be made. The params cane be in form of
* name=value pair or JSON format.
*
* @param type Request method. 1 - Get, 2 - Post.
* @param url url string to which request has to be
* made.
* @param path path of the resource or service for a
* url.
* @param params request parameters. Can be either
* name=value pair or JSON request.
*
* @return String representation of the response.
*
*/
public static String[] makeRequest(int type, String url, String path, String params) {
String[] response = new String[2];
ClientResponse clientResponse = null;
try {
ClientConfig config = new DefaultClientConfig();
config.getClasses().add(StringProvider.class);
Client client = Client.create(config);
WebResource service =
client.resource(url);
client.addFilter(new LoggingFilter());
service.path("rest");
// 1 - GET, 2 - POST
switch (type) {
case 1: {
System.out.println("Making GET request to: " + url + path);
System.out.println("Request Params: " + params);
clientResponse = service.path(path).type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON).get(ClientResponse.class); //TODO Code to be corrected, include params
break;
}
case 2: {
System.out.println("Making POST request to: " + url + path);
System.out.println("Request Params: " + params);
clientResponse = service.path(path).type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, params);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
response[0] = "500";
response[1] = "Internal Server Error";
return response;
}
response[0] = String.valueOf(clientResponse.getStatus());
response[1] = clientResponse.getEntity(String.class);
System.err.println("Response status: " + response[0]);
return response;
}//end of makeRequest()
}//end of class
しかし、私はパフォーマンスの問題を引き起こすすぎて文字列オブジェクトを作成することで納得していない午前:ここ
は私のクラスです。そこで私は、レスポンスコードとレスポンスを返すMapを作成することを考えました。
response.put(500, "Internal Server Error");
しかし、再び、整数でマップを作成し、毎回応答コードをチェックすること再びパフォーマンスにつながる可能性がIntegerオブジェクトのボックス化とアンボックス化のオーバーヘッドを作成します。
HashMap<Integer, String> response = RequestHandler.makeRequest(2, urlString, "/login", params);
if (response.containsKey(500)) {
return Message.INTERNAL_SERVER_ERROR;
}
パフォーマンスを向上させるにはどちらを使用しますか?それとももっと良い選択肢がありますか?
+1回避時期尚早な最適化 –