2016-04-20 103 views
1

我有例如url http://example.com/{x}/push/{y}。 而我正在使用OkHttp对该网址进行查询。是否可以使用OkHttp设置占位符路径参数

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

是否有可能以某种方式设置这些{x}{y}路径参数? 我看到类似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。 –

相关问题