UriBuilder неправильно кодирует значение Query Parameters?

Давайте рассмотрим следующий пример кода, в котором закодированы путь и отдельный параметр...

Название параметра: "param"

Значение параметра: "foo/bar? Aaa=bbb&ccc=ddd" (бывает URL с параметрами запроса)

   String test = UriBuilder.fromPath("https://dummy.com").
               queryParam("param", "foo/bar?aaa=bbb&ccc=ddd").
               build().toURL().toString();

Возвращена закодированная строка URL:

 "https://dummy.com?param=foo/bar?aaa%3Dbbb&ccc%3Dddd"

Это правильно?

Разве символ "&" (и может быть даже "?") Не должен быть закодирован в строке значения параметра?

Не будет ли полученный URL интерпретироваться следующим образом:

Один первый параметр name="param", value = "ar? Aaa%3Dbbb", за которым следует второй параметр name="ccc%3Dddd", без значения.

1 ответ

Ваш начальный вызов "fromPath", вероятно, должен быть "fromUri". Это сказал...

Это правильно?

Нет, это не похоже на правильный вывод.

Разве символ "&" (и может быть даже "?") Не должен быть закодирован в строке значения параметра?

Да, так и должно быть.

Не будет ли полученный URL интерпретироваться следующим образом:

Один первый параметр name="param", value = "ar? Aaa%3Dbbb", за которым следует второй параметр name="ccc%3Dddd", без значения.

Первый параметр будет "foo/bar? Aaa=bbb", но да, вы интерпретируете правильно. Это похоже на ошибку в вашем провайдере javax.ws.rs.core.

Другие вопросы по тегам