2016-04-20 10 views
1

Ich habe zum Beispiel url http://example.com/{x}/push/{y}. Und ich benutze OkHttp, um eine Abfrage zu dieser URL zu machen.Ist es möglich, Platzhalter Pfadparameter mit OkHttp

final HttpUrl httpUrl = HttpUrl 
       .parse("http://example.com/{x}/push/{y}") 
       .newBuilder() 
       ??? 
       .build(); 

Ist es möglich, diese {x} und {y} Weg params zu setzen irgendwie? Ich sah eine Methode wie addPathSegment, aber es ist nicht das, was ich will.

+0

Können Sie einfache String-Verkettung machen? Z.B. '.parse (" http://example.com/ "+ x +"/push/"y)' Und x und y werden an die Funktion oder etwas übergeben. Ich habe es in meiner App so gemacht. – Vucko

+0

Eigentlich kann ich, aber es sieht hässlich für mich besonders, wenn ich HttpUrl-Klasse verwenden, um einige Abfrageparameter zu beenden. –

+0

Nun, Rand Fall - tun Sie es auf die hässliche Art und Weise. Ich habe gesehen, dass die Injektion, von der Sie in anderen Programmiersprachen sprechen, nicht weiß, ob es in Java möglich ist. – Vucko

Antwort

0

Hier ist eine Technik, die Ihnen den Einstieg erleichtern könnte.

HttpUrl template = HttpUrl.parse("http://example.com/{a}/b/{c}"); 
HttpUrl.Builder builder = template.newBuilder(); 

for (int i = 0; i < template.pathSegments().size(); i++) { 
    String parameter = template.pathSegments().get(i); 
    String replacement = null; 

    if (parameter.equals("{a}")) { 
    replacement = "foo"; 
    } else if (parameter.equals("{c}")) { 
    replacement = "bar"; 
    } 

    if (replacement != null) { 
    builder.setPathSegment(i, replacement); 
    } 
} 

HttpUrl url = builder.build(); 
+0

Komm schon, ist es nicht hässlich für dich? Ich würde sagen String.format sieht schöner aus. –

+0

Das hängt davon ab, was Ihre Ziele sind. Wenn die Ersetzungszeichenfolgen Sonderzeichen wie '?' Oder '#' enthalten können, gibt 'String.format()' möglicherweise die falsche URL an. –