Vra

As u Apache se commons-http-kliënt vir Java gebruik, wat is die beste manier om navraagparameters by 'n GetMethod-instansie te voeg?As ek PostMethod gebruik, is dit baie eenvoudig:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

GetMethod het egter nie 'n "addParameter"-metode nie.Ek het ontdek dat dit werk:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

Die meeste van die voorbeelde wat ek al gesien het, kodeer egter die parameters direk in die URL, bv.:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

of hardkodeer die navraagstring, bv.:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

Is een van hierdie patrone te verkies?En hoekom die API-teenstrydigheid tussen PostMethod en GetMethod?En waarvoor is al daardie ander HttpMethodParams-metodes bedoel om gebruik te word?

Was dit nuttig?

Oplossing

Post metodes post parameters, maar get metodes nie .

Query parameters is ingesluit in die URL. Die huidige weergawe van HttpClient aanvaar 'n string in die constructor. As jy wil die sleutel, waarde pair bo voeg, kan jy gebruik:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

'n goeie begin handleiding kan gevind word op die Apache Jakarta Commons bladsy .

Update :. Soos in die kommentaar voorgestel, NameValuePair werk

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

Ander wenke

Dit is nie net 'n kwessie van persoonlike voorkeur nie.Die tersaaklike kwessie hier is URL-kodering van jou parameterwaardes, sodat die waardes nie korrupteer of verkeerd geïnterpreteer word as ekstra skeidings, ens.

Soos altyd is dit die beste om die API-dokumentasie in detail te lees:HttpClient API Dokumentasie

As u dit lees, kan u dit sien setQueryString(String) sal NIE jou parameters en waardes URL-kodeer of afbaken nie, terwyl setQueryString(NameValuePair[]) sal outomaties jou parametername en waardes URL-enkodeer en afbaken.Dit is die beste metode wanneer jy dinamiese data gebruik, want dit kan ampersands, gelyke tekens, ens.

Probeer dit op hierdie manier:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top