Springboot: @RequestParam в контроллере читает запрос с '&' и '#' как пустой - PullRequest
1 голос
/ 16 апреля 2019

У меня есть Spring-Boot приложение, работающее на Tomcat .Внутри него у меня есть RestController с параметром запроса.@RequestParam не читает '&' или '#', переданные в качестве параметра запроса.Например, если я задаю http://localhost:8080/v1/test?query=&, то метод контроллера не принимает & в качестве значения

@RequestMapping(value = "/v1/test", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
     public String getV2LocationByName(
                                      @RequestParam
                                      String cityName cityName,
                                      @RequestParam(value = LANGUAGE, defaultValue = US_ENGLISH_LOCALE) String language,
                                      HttpServletRequest request) throws InterruptedException, ExecutionException {
--------------
---------------
 System.out.println(cityName);
}

Вышеприведенная программа возвращает пустой вывод для & и #

Почему пружинаограничить эти специальные символы, но это не ограничение каких-либо других специальных символов?А также, если использовать параметр запроса как «Андаман и Никобар», параметр запроса читается как «Андаман»

Ответы [ 2 ]

4 голосов
/ 16 апреля 2019

Вам необходимо закодировать ваши специальные символы на внешней стороне.

Т.е. '$' is '%26'

Хорошей практикой является явное добавление имени в ваше @RequestParam("cityName")

1 голос
/ 16 апреля 2019

Амперсанд (&) используется для разделения нескольких параметров запроса, а хэштег (#) используется для закладок / якорей в HTML.

Они оба являются специальными символами, и их необходимо кодировать, если они не предназначены для этих целей.

Более подробную информацию по теме можно найти здесь * 1006.*.

...