2016-10-04 2 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를 메서드 외부에 구성하여 단일 인수로 전달해야 할 수 있습니다.

작은 구문 상 이기심을 원하면 Google 및 Gson 라이브러리를 확인해보십시오. 뉴저지는 자바 클래스로 모델처럼 당신이 라이브러리를 사용할 수 있습니다, 당신은 전체의 REST API와 상호 작용하는 경우, 또는

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)); 
} 

어쩌면 여기서 핵심은 자바가 간결하지 않다는 것을 숨길 수 있습니다.

0

당신은

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

그러나이 모든 일 문자열에 매개 변수를 제한 할 수있는, 당신은 시작과 방법 내에서 직렬화를 건너 뛸 수있는 매개 변수로 사용 된 JSONObject에 보낼 수 있습니다.

관련 문제