Как запретить привязке параметра интерпретировать запятые в Spring 3.0.5?

Рассмотрим следующий метод контроллера:

@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(@RequestParam(value = "fq", required = false) String[] filterQuery) {
    logger.debug(fq = " + StringUtils.join(filterQuery, "|"));
}

Вот результат для разных fq комбинации:

  1. / test? fq = foo приводит к fq = foo
  2. / test? fq = foo & fq = bar приводит к fq = foo | bar
  3. / test? fq = foo, bar приводит к fq = foo | bar
  4. / test? fq = foo, bar & fq = bash приводит к fq = foo, bar | bash
  5. / 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, я приму их ответ.

53
задан javanna 1 April 2011 в 02:09
поделиться