ОК, после некоторой трассировки исходного кода Spring, я думаю, что у меня есть некоторые окончательные ответы.
1) Добавление параметров запроса к URL-адресу, который вы возвращаете в строке «redirect: ...», является ОЧЕНЬ ПЛОХОЙ ИДЕЕЙ. Spring кэширует представления, на которые ссылаются эти URL-адреса, поэтому, если вы укажете множество различных параметров, вы фактически утечете память, заставив кэш-память хранить множество значений, в которых она не нуждается.
Обратите внимание, что пример кода PetClinic в дистрибутиве Spring делает именно это, и, очевидно, возникла проблема с Jira, чтобы исправить это: -)
2) Объект модели по-прежнему удерживается Spring, когда контроллер возвращается, и Spring автоматически добавляет любые значения в нем в указанный вами URL-адрес (в качестве параметров запроса) - ОБЕСПЕЧИВАЕТ, что значения модели - это простые String или примитивные объекты. Теперь, поскольку объект поддержки формы - это объект, хранящийся в виде одного атрибута, Spring ничего с ним не делает.
Итак, из аннотированного контроллера лучше всего добавить параметр ModelMap в метод обработчика. Когда вы будете готовы вернуться, сделайте что-то вроде этого:
Assuming the form backing object "formObject" has been passed as a parameter to the controller handler method (via the ModelAttribute annotation) and has properties "param1" and "param2" that are Strings -
modelMap.clear();
modelMap.addAttribute("param1", formObject.getParam1());
modelMap.addAttribute("param2", formObject.getParam2());
return "redirect:/my/url";
И Spring выдаст перенаправление на / my / url? Param1 = значение; param2 = значение
Похоже, не существует встроенного механизма (в Spring), чтобы превратить бин в список пар ключ / значение для добавления на карту, но если вам это действительно нужно, библиотека Apache BeanUtils подойдет мило. Конечно, вы не хотите делать это для больших объектов, в противном случае вы можете превысить допустимую длину URL.
Найти все это оказалось гораздо сложнее, чем нужно было: -)