免责声明:我是作者,但是...
你可以试试这个库。它是 RFC 6570(URI 模板)的实现。平心而论,我应该提到存在另一个实现,它有一个更好的 API 但更多的依赖项(我的只依赖于 Guava)。
假设您有变量int1
, int2
, month
,您的模板将是:
http://www.asite.com/path/to/something/{int1}/{month}-{int2}
使用该库,您可以执行以下操作:
// Since the lib depends on Guava, might as well use that
final List<String> months = ImmutableList.of("jan", "feb", "etc");
// Create the template
final URITemplate template
= new URITemplate("http://www.asite.com/path/to/something/{int1}/{month}-{int2}");
// Variable values
VariableValue int1, month, int2;
// Expansion data
Map<String, VariableValue> data;
// Build the strings
for (int i1 = 0; i1 <= 10; i1++)
for (final String s: months)
for (int i2 = 0; i2 <= 1000; i2++) {
int1 = new ScalarValue(Integer.toString(i1));
month = new ScalarValue(s);
int2 = new ScalarValue(Integer.toString(i2));
data = ImmutableMap.of("int1", int1, "month", month, "int2", int2);
// Print the template
System.out.println(template.expand(data));
}
重要说明:该.expand()
方法返回 a String
,而不是 aURI
或 a URL
。原因是 RFC 虽然保证了展开结果,但不能保证结果字符串实际上是一个 URI 或 URL。你必须自己把那个字符串变成你想要的。