【问题标题】:Can a Spring MVC controller return both a HttpServletResponse and a view?Spring MVC 控制器可以同时返回 HttpServletResponse 和视图吗?
【发布时间】:2013-11-10 21:14:53
【问题描述】:

我现有的代码是这样的:

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

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

【问题讨论】:

    标签: spring servlets spring-mvc


    【解决方案1】:

    是的。

    @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";
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

      希望任何寻找其背后的调度程序逻辑的人都明白这一点。

      【讨论】:

        猜你喜欢
        • 2010-09-16
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        相关资源
        最近更新 更多