使用 Spring MVC 生成输出有两种方式
- 您可以使用 RESTful
@ResponseBody
方法和 HTTP 消息转换器,通常用于返回 JSON 或 XML 等数据格式。编程客户端、移动应用和支持 AJAX 的浏览器是常见的客户端。 - 或者您可以使用视图解析。虽然视图完全能够生成 JSON 和 XML(如果需要,我的下一篇文章会详细介绍),但视图通常用于为传统 Web 应用程序生成 HTML 等演示格式。
- 实际上还有第三种可能性 - 有些应用程序同时需要这两种方式,而 Spring MVC 可以轻松支持这种组合。我们将在最后回到这一点。
无论哪种情况,您都需要处理由控制器返回的相同数据的多种表示形式(或视图)。确定返回哪种数据格式称为内容协商。
有三种情况需要我们知道在 HTTP 响应中发送何种数据格式
- HttpMessageConverters:确定要使用的正确转换器。
- Request Mappings:将传入的 HTTP 请求映射到返回不同格式的不同方法。
- View Resolution:选择要使用的正确视图。
确定用户请求的格式依赖于 ContentNegotationStrategy
。开箱即用有默认实现,但您也可以根据需要实现自己的策略。
在这篇文章中,我想讨论如何使用 Spring 配置和使用内容协商,主要是在使用 HTTP 消息转换器的 RESTful 控制器方面。在稍后的文章中,我将展示如何使用 Spring 的 ContentNegotiatingViewResolver
专门为视图设置内容协商…