Рассмотрим следующий метод контроллера:
@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, я приму их ответ.