如何使spring不将所有模型属性添加到重定向URL?

时间:2014-08-12 04:23:53

标签: spring-mvc

在我们经常使用return new ModelAndView(new RedirectView("/url"))从Spring控制器返回重定向之前使用旧式(extends * Controller)控制器时。

升级到Spring 4.0(@Controller)后,我们开始使用return "redirect:/url"从@ RequestMapping-annotated方法执行相同操作。但是我们注意到Spring将所有模型属性添加到生成的重定向URL中。这对我们来说是高度不良行为。

更糟糕的是:因为那些被添加到“位置”HTTP标头(HTTP 302的标准),这使得Tomcat抛出以下异常:

Aug 11, 2014 2:42:31 PM org.apache.coyote.ajp.AjpProcessor process
SEVERE: Error processing request
java.lang.ArrayIndexOutOfBoundsException: 8192
    at org.apache.coyote.ajp.AjpMessage.appendByte(AjpMessage.java:146)

我想到的一个解决方案是在每次重定向之前清除模型,但这很麻烦。

有没有办法配置Spring不要将所有模型属性添加到重定向网址?

2 个答案:

答案 0 :(得分:2)

ignore-default-model-on-redirect="true"添加到您的<mvc:annotation-driven>代码。

答案 1 :(得分:0)

在新的应用程序中,或者如果您的应用程序不依赖于重定向归因于模型的使用,您应该将ignore-default-model-on-redirect="true"添加到<mvc:annotation-driven>标记中,如Aramir所说。

如果只涉及其他需要传统模式的新方法,则可以在方法中添加RedirectAttribute参数。一旦存在,Spring就会使用它而不是模型来确定应该在重定向的URL中使用哪些属性。