Spring MVC控制器可以返回HttpServletResponse和视图吗?

时间:2013-10-31 01:18:36

标签: spring servlets spring-mvc

我现有的代码如下:

String myController(@PathVariable someId, ModelMap map){
....
return "myViewName";
}

现在我想在某些情况下设置一个cookie,所以我需要获取一个HttpServletResponse对象。我可以将这样的响应对象添加到参数列表中并在控制器中对其进行操作吗? 如果是这样,我想知道我自己的响应是如何与解析“myViewName”的JSP生成的响应相协调的。

2 个答案:

答案 0 :(得分:9)

@RequestMapping
public String myController(@PathVariable someId, ModelMap map, HttpServletResponse response) {
    // Do what you need to do on the response, like set a cookie
    return "myViewName";
}

答案 1 :(得分:0)

关于你的另一个问题:"我自己的回答如何与解决了#34; myViewName"的JSP生成的响应进行了协调。"

当您返回视图说" myViewName"时,它将被解析为特定资源(JSP视图或JSON视图或任何其他视图)。根据您返回的内容获取该视图资源后,该视图会对呈现进行呈现。此响应对象与传递给控制器​​函数(myController)的响应对象相同。因此,如果您在控制器函数中的响应上设置了一些cookie /标头,则视图用于执行渲染的响应也将具有相同的属性。

如果您想自己处理实际的渲染/响应,您可以始终获取响应的输出流并写入并关闭流。然后,您的返回视图将被忽略,因为调度程序将检查响应是否已经处理,并且只会发布句柄。

希望为任何寻找其背后的调度程序逻辑的人清除。