Q:

Передать # в URL в параметре запроса в ResponseEntity

Есть у меня такой url:
bookManag/book?name=world and war #2&field=1

передаю в параметре name - world and war #2 проблема в том, что после # всё обрезается и следующий параметр field не приходит. Хорошо, я нашёл как выйти из этой ситуации и заменил решётку на %23
bookManag/book?name=world and war %232&field=1

Но основная проблема не в этом, пытаюсь получить ответ через ResponseEntity
    String url = "http://localhost:8081/bookManag/book?name=world and war %232&field=1";
    org.springframework.http.ResponseEntity result = restTemplate.exchange(url, HttpMethod.GET, entity, getRespType(), params);

После и происходит ошибка уже внутри спринга, вместо моего правильного url, spring его переделывает в 
"http://localhost:8081/bookManag/book?name=world and war %20%25232&field=1"

заменяя %23 на %2523, что в итоге дает не правильный результат. Как исправить эту проблему?

A:

Для кодирования URL надо использовать URLEncoder, в частности его метод encode
Вам достаточно прогнать через encode только часть URL-а c решеткой
String url = "http://localhost:8081/bookManag/book?name=" + URLEncoder.encode("world and war #2", "UTF-8") + "&field=1";

В результате у Вас получится строка вида http://localhost:8081/bookManag/book?name=world+and+war+%232&field=1, которая вполне себе валидный URL

