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

@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
Abhi 16 Апр 2019 в 13:46

2 ответа

Лучший ответ

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

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

Вы можете найти дополнительную информацию по теме здесь.

1
Dimitris 16 Апр 2019 в 11:02

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

I.e '$' is '%26'

Хорошая практика - явно добавлять имя в ваш @RequestParam("cityName").

4
Maciej Kowalski 16 Апр 2019 в 10:56