Шаблон отдыха с косой чертой в параметре - PullRequest
0 голосов
/ 11 июня 2018

Я делаю вызов REST с RestTemplate, и у меня есть урипарам, который содержит косую черту (т. Е. 20/20)

Перед вызовом RestTemplate я преобразую uriParam в использованиеhttp-кодировка 20%2f20.

Когда я вызываю RestTemplate, он преобразует % в %25, и данные, которые я получаю, неверны.

Возможно вызвать restTemplateс косой чертой в параметре?

Спасибо!

Пример кода:

String urlExample="www.nowhere.com/?variable={variable}";
String variable = URLEncoder.encode( "20/20", java.nio.charset.StandardCharsets.UTF_8.toString() );

Map< String, String > uriVariables = new HashMap<>();
 uriVariables.put( "variable", variable );

restTemplate.exchange( urlExample, HttpMethod.GET, new HttpEntity<>, String.class, uriVariables );
  • Если я не выполняю httpEncoder, я получаю отдыхвызов: http://www.nowhere.com/?variable=20/20, и значение переменной получает только 20.

  • Если я сделаю httpEncoder, значение переменной будет% 2F (Это правильно, этозначение, которое я хочу), но когда я делаю вызов остальных, он вызывает: http://www.nowhere.com/?variable=20%252F20.

Кажется, RestTemplate кодирует HttpEncoding от% до% 25, ​​и это прерывает мой вызов.Можно избежать этой кодировки?

Решено:

, если вы указываете restTemplate для использования URI вместо String, RestTemplate избегает кодирования.

Для построения URI с параметрами лучше всего использовать UriComponentsBuilder, указывающий, что URI фактически закодирован в параметре build ().

1 Ответ

0 голосов
/ 11 июня 2018

Попробуйте следующую логику для вашего обработчика теста, которая может быть "www.nowhere.com/a/b/c", и вы получите все значение, используя следующий механизм.

requestedUri = (String) 
request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
...