Пытаясь URIEncode строки в Java с помощью URIUtils
Я пытаюсь URIENcode строки в Java, используя URIUtils из Spring Framework.
насколько я понял, все должно быть просто, но по какой-то причине строка остается неизменной.
У меня есть следующая строка:
http://www.foo.bar/foo/bar
и я хочу URIEncode это.
final String ENC = "UTF-8";
String uri = "http://www.foo.bar/foo/bar";
final String result = UriUtils.encodeFragment(uri, ENC);
результат - та же строка, не закодированная.
Что я делаю неправильно?
Как я могу правильно URIEncode этой строки, чтобы использовать ее в параметрах получения?
Я не хочу использовать URLBuilder, потому что мне нужно использовать полученный результат и создать хеш-таблицу для внутренней базы данных.
благодарю вас
2 ответа
Я думаю, что вы можете достичь того же, используя java.net.URLEncoder
, избегая весеннего класса
System.out.println(URLEncoder.encode("http://www.foo.bar/foo/bar", "UTF-8"))
будет печатать
http%3A%2F%2Fwww.foo.bar%2Ffoo%2Fbar
Существует RFC, который позволяет строить URI из разных параметров: шаблоны URI.
Поскольку вы используете Java, оказывается, что есть доступная реализация (отказ от ответственности: да, это мое).
Вы могли бы тогда сделать так:
// The template
final URITemplate tmpl = new URITemplate("http://my.site/foo{?params*}");
// The query parameters
// Uses Maps from Guava since the lib depends on it
final Map<String, String> params = Maps.newHashMap();
params.put("site", "http://www.foo.bar/foo/bar");
// The template data expansion
final Map<String, VariableValue> data = Maps.newHashMap();
data.put("params", new MapValue(params));
// Expand, build the URL
// The expansion takes care of all the encoding for you
final URL url = new URL(template.expand(data));