6

我现有的代码是这样的:

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

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

4

2 回答 2

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";
}
于 2013-10-31T01:27:56.270 回答
0

关于您的另一个问题:“我自己的响应如何与解析“myViewName”的 JSP 生成的响应相一致。”

当您返回一个视图说“myViewName”时,它将被解析为特定资源(JSP 视图或 JSON 视图或任何其他视图)。一旦根据您返回的内容获得该视图资源,该视图就会对响应进行渲染。此响应对象与传递给控制器​​函数 (myController) 的对象相同。所以说,如果你在控制器函数的响应中设置一些 cookie/headers,视图用来进行渲染的响应也将具有相同的属性。

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

希望任何寻找其背后的调度程序逻辑的人都可以解决。

于 2017-06-23T15:04:20.950 回答