ModelAndView 在向客户端发送响应之前是否序列化模型
Does ModelAndView serialize model before sending response to client
在 spring mvc 中,当我们 return ModelAndView / Model 对象时,它是否被序列化以通过 HTTP 发送?
就像在 REST API 中发生的那样,@ResponseBody 注释方法 returned 值被序列化。
如果不是,模型对象如何在 Spring MVC 中通过 HTTP 传输,正如我读到的那样,如果没有序列化,对象就不能通过 HTTP 传输?
视情况而定。这取决于所使用的视图技术。但对于大多数人来说,它们将作为请求属性公开,这是在 View
中完成的。 AbstractView
有大多数 View
实现使用的代码。
对于像 Freemarker 这样的东西,模型既作为请求属性公开,也添加到 Freemarker 内部模型对象中。这样 Freemarker 就可以呈现页面,您还可以在模板中使用标签来检索请求属性。
取决于序列化时使用的实际视图技术。对于生成 HTML、PDF、Excel 等的内容,不会进行任何序列化。所有渲染和处理都在服务器上完成,最终结果(完整视图)正在发送到客户端。
但是,对于像 MappingJackson2JsonView
(还有其他的)这样的视图技术,它们实际上将使用 Jackson 序列化模型。但最终,这将是通过 HTTP 发送的 JSON。
因此,通过 HTTP 发送的至少不是实际模型,而是取决于所使用的视图技术。
在 spring mvc 中,当我们 return ModelAndView / Model 对象时,它是否被序列化以通过 HTTP 发送? 就像在 REST API 中发生的那样,@ResponseBody 注释方法 returned 值被序列化。 如果不是,模型对象如何在 Spring MVC 中通过 HTTP 传输,正如我读到的那样,如果没有序列化,对象就不能通过 HTTP 传输?
视情况而定。这取决于所使用的视图技术。但对于大多数人来说,它们将作为请求属性公开,这是在 View
中完成的。 AbstractView
有大多数 View
实现使用的代码。
对于像 Freemarker 这样的东西,模型既作为请求属性公开,也添加到 Freemarker 内部模型对象中。这样 Freemarker 就可以呈现页面,您还可以在模板中使用标签来检索请求属性。
取决于序列化时使用的实际视图技术。对于生成 HTML、PDF、Excel 等的内容,不会进行任何序列化。所有渲染和处理都在服务器上完成,最终结果(完整视图)正在发送到客户端。
但是,对于像 MappingJackson2JsonView
(还有其他的)这样的视图技术,它们实际上将使用 Jackson 序列化模型。但最终,这将是通过 HTTP 发送的 JSON。
因此,通过 HTTP 发送的至少不是实际模型,而是取决于所使用的视图技术。