2016-10-04 34 views
0

メソッドに複数のパラメータを渡し、それらのパラメータをペイロードに入れる適切な方法は何ですか?Java:メソッドに複数のパラメータを渡す

方法サーバーへのペイロード/ wのHTTPリクエストを送信(およびそれからの応答を受信)、これはうまく機能しなければならない:

public static JSONObject myMethod(String parameterOne, JSONArray parameterTwo, String parameterThree, long parameterFour) { 

    ... 

    HttpPost request = new HttpPost(url); 
    request.addHeader("Content-Type", "application/json"); 

    JSONObject payload = new JSONObject(); 
    payload.put("parameterOne", parameterOne); 
    payload.put("parameterTwo", parameterTwo); 
    payload.put("parameterThree", parameterThree); 
    payload.put("parameterFour", parameterFour); 

    request.setEntity(new StringEntity(payload.toString())); 

    ... 

しかし、私は別のがあるべきと信じて、より効率的なこれを行うための(そして美的)方法です。

+0

もっと効率的な/美的なものは存在すると思いますか? – Spotted

答えて

1

本当にあなたの方法が必要な再利用可能な方法にかかっています。その4つのパラメータのセットを使ってリクエストを送信する必要がある場合は、おそらく取得できるほど簡潔です。任意のJSONデータを送信する場合は、JSONObjectをメソッドの外に構築し、それを1つの引数として渡すことをお勧めします。

小文字の構文上の勝利を探している場合は、Google とGsonライブラリをチェックしてください。あなたは全体のREST APIと対話している場合、あなたはJavaクラスとしてそれをモデル化するためにジャージーのようなライブラリを使用することができ、

また
public void callingMethod() { 
    Map<String, Object> params = ImmutableMap.of(
     "param1Name", param1Value, 
     "param2Name", param2Value, 
    ); 
    makeRequest(params); 
} 

public void makeRequest(Map<String, Object> params) { 
    HttpPost request = new HttpPost(url); 
    request.addHeader("Content-Type", "application/json"); 
    request.setEntity(new Gson().toJson(params))); 
} 

、その後、プロキシを作成します。彼らはあなたがわずかにこれを凝縮させたいです

@Path("/v1") 
public interface RestApi { 
    @POST 
    @Path("/objects/{objectId}/create") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces(MediaType.APPLICATION_JSON) 
    ResponseObject createObject(@PathParam("objectId") Integer objectId, RequestObject body); 
} 

public class RequestObject { 
    public final String param1; 
    public final List<Integer> param2; 

    public RequestObject(String param1, List<Integer> param2) { 
     this.param1 = param1; 
     this.param2 = param2; 
    } 
} 

public class ResponseObject { 
    // etc 
} 

public static void main() { 
    String url = "https://api.example.com"; 
    Client client = ClientBuilder.newBuilder().build().target(url); 
    RestApi restApi = WebResourceFactory.newResource(RestApi.class, clientBuilder); 
    ResponseObject response = restApi.createObject(12, new RequestObject("param1", ImmutableList.of(1,2,3)); 
} 

私は、ここでのポイントは、Javaは特に簡潔ではないと考えています。

0

あなたは

public static JSONObject myMethod(String ... params) { 
    //access each one like so: 
    //params[0] 
    //params[1] 
} 
//... 
myMethod("here", "are", "multiple", "parameters"); 

を行うことができますしかし、これは、すべてのことが文字列にパラメータを制限し、あなたはで始まり、メソッド内のシリアル化をスキップするパラメータとしてJSONObjectに送信することができます。