Рассмотрим следующий метод контроллера:
@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
, но niether работать.
Если я посмотрю на версию объекта HttpServletRequest
:
String[] fqs = request.getParameterValues("fq");
logger.debug(fqs = " + StringUtils.join(fqs, "|"));
Он печатает ожидаемый результат: fqs = foo,bar
. Таким образом, "проблема" связана с привязкой данных Spring.
Я мог бы обходить привязку Spring и использовать HttpServletRequest
, но я действительно не хочу, поскольку я использую поддержку bean в моем реальном коде (то же самое происходит) и не хотят повторно реализовывать функциональные возможности привязки. Я надеюсь, что кто-то может обеспечить простой способ предотвратить это поведение посредством экранирования или какого-либо другого механизма.
ТИА
ОБНОВЛЕНИЕ:. Я разместил этот Q на Twitter и получил ответ, в котором говорилось ожидаемый вывод с Spring 3.0.4.RELEASE. Я подтвердил, что это так, и, следовательно, это временное решение. Я расскажу об этом как об ошибке в системе Spring JIRA. Если кто-то может обеспечить работу или исправить с помощью 3.0.5, я приму их ответ.