2016-04-20 3 views
1

У меня есть, например, url http://example.com/{x}/push/{y}. И я использую OkHttp для запроса к этому URL-адресу.Можно ли установить параметры пути с помощью подстановки с OkHttp

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

Можно ли установить каким-то образом эти {x} и {y} путь Params? Я видел метод как addPathSegment, но это не то, что я хочу.

+0

Можете ли вы сделать простой конкатенации строк? Например. '.parse (" http://example.com/ "+ x +"/push/"y)' И x и y передаются функции или что-то в этом роде. Я сделал это в своем приложении. – Vucko

+0

На самом деле я могу, но это выглядит уродливо для меня, особенно когда я использую класс HttpUrl для добавления некоторых параметров запроса для завершения. –

+0

Ну, краевой кейс - сделайте это уродливым путем. Я видел эту инъекцию, о которой вы говорите на других языках программирования, не знаю, возможно ли это на Java. – Vucko

ответ

0

Это - один из способов помочь вам начать работу.

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

Не так ли уродливый для вас? Я бы сказал, что String.format выглядит лучше. –

+0

Это зависит от ваших целей. Если строки замены могут содержать в себе специальные символы, такие как '?' Или '#', то 'String.format()' может указывать неверный URL-адрес. –

Смежные вопросы