"http://example.com/name/{name}/age/{age}"
のような文字列に対して変数を割り当てたいとき、
javax.ws.rs.core.UriBuilder
が利用できる。
URI文字列がqueryも含む場合は、 UriBuilder.fromUri()
を利用すると良い。
- Javaの場合
import javax.ws.rs.core.UriBuilder; import java.util.HashMap; import java.util.Map; class Demo { public static void main(String[] args) { String template = "http://example.com/name/{name}/age/{age}"; // mapで変数に対応するkey-valueを与えると置換できる // UriBuilder.buildFromMap() Map<String, String> parameters = new HashMap<>(); parameters.put("name","Bob"); parameters.put("age","17"); String bob = UriBuilder.fromPath(template) .buildFromMap(parameters) .toASCIIString(); // http://example.com/name/Bob/age/17 System.out.println(bob); // 変数の順番が固定であれば、手前から順番に置換することもできる // UriBuilder.build() String alice = UriBuilder .fromPath(template) .build("Alice","15") .toASCIIString(); // http://example.com/name/Alice/age/15 System.out.println(alice); } }
- Kotlinの場合
import javax.ws.rs.core.UriBuilder fun main() { val template = "http://example.com/name/{name}/age/{age}" // mapで変数に対応するkey-valueを与えると置換できる // UriBuilder.buildFromMap() val parameters = mapOf( "name" to "Bob", "age" to "17" ) val bob = UriBuilder.fromPath(template) .buildFromMap(parameters) .toASCIIString() // http://example.com/name/Bob/age/17 println(bob) // 変数の順番が固定であれば、手前から順番に置換することもできる // UriBuilder.build() val alice = UriBuilder.fromPath(template) .build("Alice", "15") .toASCIIString() // http://example.com/name/Alice/age/15 println(alice) }
参考 : how to use URI templates to change path parameters in a URL in java - Stack Overflow