Пытаясь 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));
Другие вопросы по тегам