2012-11-09 6 views
0

Google Http Client와 Jackson을 사용하여 백엔드 (JSON API)에 데이터를 쿼리합니다.Google Http 클라이언트를 사용하여 GET 요청의 매개 변수로 객체를 전달합니다.

매개 변수 (하나의 Java bean 객체)를 전달해야합니다. 객체에는 필드가 거의 없거나 많을 수 있습니다. 처음에 나는 다음과 같이 컨텐츠로 전달하려고 :

HttpRequest request = requestFactory.buildGetRequest(getUrl(api)).setContent(new JsonCContent(jsonFactory, params));

는 그러나, 나는 GET 작업의 HTTP 컨텐츠를 설정할 수 아니에요.

제안 사항 어떻게 이러한 매개 변수를 전달할 수 있습니까?

조건 : 이 개체를 URL 매개 변수 문자열로 변환하는 util 메서드를 작성하고 싶지 않습니다. 이미 API를 재사용 할 수 있다면, 괜찮을 것입니다.

가능한 경우 제네릭 솔루션이 필요합니다. 왜냐하면 600 개의 JSON API 호출에이를 적용 할 것이기 때문입니다.

내 마지막 대안은 GET 대신 POST 요청을 예상하도록 백엔드를 변경 한 다음 클라이언트 측에서 POST 작업을 수행하는 것입니다.

감사

답변

0

예상 사용량이 buildGetRequest() 호출에 대해 사용하는 URL 클래스를 확장하는 것 같다. 예를 들어, "user"및 "token"이라는 두 개의 추가 쿼리 매개 변수를 제공하려고한다고 가정 해 봅시다.

HttpRequest request = requestFactory.buildGetRequest(
    new CustomUrl("http://www.yourserver.com").setUser(userId).setToken(token)); 

CustomUrl 클래스는 다음과 같이 정의됩니다 : 당신은 다음이 할 수

public class CustomUrl extends GenericUrl { 
    public CustomUrl(String encodedUrl) { 
     super(encodedUrl); 
    } 

    @Key("user") 
    private String mUserId; 

    @Key("token") 
    private String mToken; 

    public CustomUrl setUser(String userId) { 
     mUserId = userId; 
     return this; 
    } 

    public CustomUrl setToken(String token) { 
     mToken = token; 
     return this; 
    } 
} 

값이 @Key 주석 필요하지 않습니다,하지만 각각의 이름으로 사용됩니다 제공된 경우 쿼리 매개 변수. 생략하면 변수 이름이 대신 사용됩니다 (see example)

자세한 내용은 google-http-client's javadoc을 확인하십시오.

+0

제안 된 솔루션으로, 매개 변수로 보낼 각 Java bean에 대해 하나의 사용자 정의 URL 객체를 만들어야합니다. 글쎄, 그건 내가 원하는 것이 아니야. 어쨌든 고마워. – hida

3

GenericUrl을 확장하는 대신 GenericUrl.put (GenericData에서 상속)을 사용하여 쿼리 매개 변수를 설정할 수 있습니다. 예를 들면 다음과 같습니다.

관련 문제