Рассмотрим следующий метод контроллера:
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(@RequestParam(value = "fq", required = false) String[] filterQuery) {
logger.debug(fq = " + StringUtils.join(filterQuery, "|"));
}
Вот результат для разных fq
комбинации:
/ test? fq = foo
приводит к fq = foo
/ test? fq = foo & fq = bar
приводит к fq = foo | bar
/ test? fq = foo, bar
приводит к fq = foo | bar
/ test? fq = foo, bar & fq = bash
приводит к fq = foo, bar | bash
/ test? Fq = foo, bar & fq =
приводит к fq = foo, bar |
Пример 3 - проблема. Я ожидаю (хочу / нуждаюсь) в выводе fq = foo, bar
.
Я пробовал экранировать запятую с помощью \
и использовать % 3C
но нет работы.
Если я посмотрю на версию объекта HttpServletRequest
:
String[] fqs = request.getParameterValues("fq");
logger.debug(fqs = " + StringUtils.join(fqs, "|"));
Он напечатает ожидаемый результат: fqs = foo, bar
. Таким образом, «проблема» связана с привязкой данных Spring.
Я мог бы обойти привязку Spring и использовать HttpServletRequest
, но я действительно не хочу, так как использую компонент поддержки в моем реальном коде (происходит то же самое) и не хочу повторно реализовывать функциональность привязки. Я надеюсь, что кто-то сможет предоставить простой способ предотвратить такое поведение с помощью экранирования или какого-либо другого механизма.
TIA
ОБНОВЛЕНИЕ: Я разместил этот вопрос в Twitter и получил ответ ожидаемый результат появляется в Spring 3.0.4.RELEASE . Теперь я подтвердил, что это так, и это временное решение. Я' Я запишу это как ошибку в системе Spring JIRA. Если кто-то может предложить обходной путь или исправить с помощью 3.0.5, я приму их ответ.