我的控制器方法如下:
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String handleSaveRequest(RedirectAttributes redirectAttributes,
Model model) {
redirectAttributes.addFlashAttribute("myFlashAttr", "FOOBAR");
return "redirect:/confirmationpage?myAttr=Some Value";
}
@RequestMapping(value = "/confirmationpage", method = RequestMethod.GET)
public String confirmationPage(@RequestParam String myAttr,
@ModelAttribute("myFlashAttr") String flashAttr,
Model model) {
logger.info("Param: " + myAttr);
logger.info("FlashAttr: " + flashAttr);
// Do Some stuff
return "path/to/confirmation.jsp";
}
我最初使用的是Spring 4.0,并且运行正常。当我重定向到确认页面时,我有myAttr = "Some Value"
和flashAttr = "FOOBAR"
。但是,升级到Spring 4.3之后,flashAttr
是空字符串(即myAttr = "Some Value"
和flashAttr = ""
)。
在黑暗中拍摄了一段时间后,我发现用"%20"
(即"redirect:/confirmationpage?myAttr=Some%20Value"
)替换重定向URL中的空格可以解决问题。进行此更改后,日志输出为预期的myAttr = Some Valu"
和flashAttr = FOOBAR
。
所以我确实有几个问题:
答案 0 :(得分:0)
深入研究后,我在Spring JIRA上发现了this issue。我能够使用建议的解决方法来解决我的问题,而不必自己处理任何编码的URL。现在,重定向的工作方式如下:
Reader
虽然所描述的问题与我的情况不完全相同,但似乎2&3的答案是:
Reader
使用的编码方案与RedirectView中的URL编码器不同。我仍然不明白我的主要问题“是什么引起了这一变化?”的答案。但出于我的目的,发布的解决方法似乎可以解决问题。