使用视图进行内容协商

工程 | Paul Chapman | 2013 年 6 月 3 日 | ...

在我之前的文章中,我介绍了内容协商的概念以及 Spring MVC 用于确定请求内容的三个策略。

在本文中,我想专门扩展该概念,介绍如何使用ContentNegotiatingViewResolver(或 CNVR)来支持不同内容类型的多个视图。

快速概览

既然我们已经知道如何从之前的文章中设置内容协商,那么使用它在多个视图之间进行选择就非常简单了。只需像这样定义一个 CNVR


    <!--
      // View resolver that delegates to other view resolvers based on the
      // content type…

本周 Spring - 2013 年 5 月 28 日

工程 | Josh Long | 2013 年 5 月 29 日 | ...

欢迎阅读新一期《本周 Spring》。如果您错过了上周的内容,SpringOne2GX 2013 的大部分议程已经发布,所以现在就预订,享受大会和机票的早鸟价!像往常一样,本周我们有很多内容要介绍,让我们开始吧!

  1. Spring Batch 项目负责人 Michael Minella 宣布了 Spring Batch 2.2.0 RC2 版本。新版本充满了很棒的新功能,包括支持 Spring Batch Java 配置 API 以及 Spring Data GemFireItemReaderItemWriter
  2. Gary Russell 刚刚宣布了 Spring Integration 3.0 里程碑 2 版本。务必查看新功能并试用一下!
  3. 参加我关于使用 Spring 构建 RESTful 服务的网络研讨会 - 2013 年 6 月 13 日。我将讨论 OAUTH、Spring MVC 和 Spring HATEOAS 在 REST 中的应用。
  4. Rossen Stoyanchev 发表博客,介绍了即将推出的 Spring 4 对 WebSockets 的支持,这看起来非常引人注目!
  5. Gary Russell 也刚刚宣布了 Spring Integration MQTT 扩展适配器里程碑 1 版本,它使得通过 Spring Integration 使用 MQTT(一种适合轻量级消息传递的消息技术)变得容易。
  6. Oliver Gierke 在 Stack Overflow 上就如何将 Spring Data 分页结果作为 JSON 返回的问题写了一篇很棒的回复。
  7. 本综述的长期读者会知道 Thymeleaf,这个模板引擎能为您的 Web 应用程序视图模板注入新的活力,并且与 Spring 配合得非常好。Thymeleaf-testing 的第一个稳定版本 2.0.0 刚刚发布
  8. Joris Kuipers 在 Trifork 博客上宣布了一组新的宏,用于使用 Freemarker(一个替代的、非常强大的模板引擎)在 Spring 应用程序中处理表单输入
  9. Oleg Tsal-Tsalko 整理了一个关于 Spring 4 新特性的演讲。做得好,Oleg!
  10. Johnathan Mark Smith 又来了,这次他带来了一个视频,介绍如何使用 Spring 进行 Java 配置。看看吧
  11. Maciej Walkowiak 写了一篇很棒的文章,介绍如何使用 Spring Data MongoDB 进行实体审计
  12. 这个命名不太好的 Java2J2EE 博客有一篇很棒、简洁明了的文章,介绍了如何使用 Spring 的 Java 配置方式设置 JPA 和 Spring MVC。不过,我建议用户不要直接调用 Spring FactoryBean 上的生命周期方法,而是选择解引用配置结果。
    @Bean public EntityManagerFactory emf(){
       LocalContainerEntityManagerFactoryBean lcemfb = ..
       return lcemfb;
    } 
    
    @Bean public PlatformTransactionManager transactionManager(){
      EntityManagerFactory emf = emf().getObject();
      return new JpaTransactionManager( emf );
    } 
    
    

Spring Framework 4.0 M1:WebSocket 支持

工程 | Rossen Stoyanchev | 2013 年 5 月 23 日 | ...

如您所见,Spring Framework 4.0 的第一个里程碑版本已经发布,同时我们发布了早期的 WebSocket 支持。为什么 WebSocket 很重要?它可以在 Web 上实现高效的双向通信,这对于需要客户端(通常是浏览器)和服务器之间以高频率、低延迟交换消息的应用程序至关重要。常见的例子包括交易、游戏、协作、数据可视化等,但用例范围将随着时间推移而增长。

WebSocket 是一个非常广泛的主题!您可以观看我们的“WebSocket 简介”,内容在……

本周 Spring - 2013 年 5 月 21 日

工程 | Josh Long | 2013 年 5 月 22 日 | ...
- Spring 框架

本周 Spring

欢迎阅读新一期《本周 Spring》!我们终于快要放完 SpringOne2GX 的视频录像了……这将是您在本周 Spring 中最后一次看到它们,因此请参考重播页面获取索引。像往常一样,我们有很多内容要介绍,让我们开始吧!

  1. Spring 项目负责人 Juergen Hoeller 刚刚宣布发布了 Spring Framework 4.0 M1 和 3.2.3.RELEASE 版本。3.2.3 更新主要包括与 Java 8 支持相关的更新和修复。而 4.0 里程碑版本则展望了 Spring 4.0 中的许多精彩功能,包括对 WebSockets、Java EE 7、@Conditional 注解(与 @Profile 注解类似)等更多功能的支持,务必查看!
  2. TcServer 2.9.2 现已可用! 此版本包含安全修复和更新,更多详情请查阅发布说明
  3. Jennifer Hickey 的演讲——跳出容器思维 - CloudFoundry 上的独立应用程序已在 YouTube 上发布高清版本。
  4. Stephen Bohlen 的演讲——面向 Java 开发人员的 Spring.NET 简介,已在 YouTube 上发布高清版本。
  5. InfoQ 对 Spring HATEOAS 做了精彩的撰文
  6. Johnathan Mark Smith 写了一篇不错的文章,介绍了如何使用 Spring 的 Java 配置风格
  7. Xavier Padró 写了一篇不错的文章,介绍了如何在 Spring Web Flow flow 中进行通信
  8. Static.com 宣布了他们基于 Hadoop 和 Cloud Foundry 的服务。坦率地说,它看起来非常棒,并且作为一个公共平台,用于托管需要后台 Hadoop 解决方案的应用程序,成本效益很高。
  9. 我真不敢相信我错过了这个!RabbitMQ 3.1.0 发布了(有点旧闻),为了介绍它,你应该看看这篇图文并茂的 RabbitMQ 3.1.0 介绍
  10. HMKCode 博客有一篇不错的文章,介绍了使用 MyBatis、Spring 和 jUnit 集成时一些文档不详尽但常见的事情
  11. Java Code Geeks 写了一个不错的教程,介绍了如何在 Spring MVC 的 form 中处理单选按钮
  12. Gerry Tan 写了一篇不错的博客,介绍了如何使用 Spring MVC 绑定表单日期值

Spring Framework 4.0 M1 & 3.2.3 已可用

工程 | Juergen Hoeller | 2013 年 5 月 21 日 | ...

亲爱的 Spring 社区:

我很高兴宣布 Spring Framework 4.0 的第一个里程碑版本,它初步实现了我们在几个关键主题上的工作:

  • 第一波针对 Java SE 8 / OpenJDK 8 的支持(详细信息如下)
  • JMS 2.0、JPA 2.1、Bean Validation 1.1 和 JSR-236 并发的初步支持(来自 EE 7 规范)
  • 初步实现我们的 Bean 定义通用条件机制(类似于 @Profile 的 @Conditional)
  • Spring 的 WebSocket 端点模型(Rossen 将很快详细介绍)

关于 Java SE 8,我们在框架的几个方面支持 OpenJDK 8 build 88+:

  • 在组件扫描和子类生成中支持 1.8 字节码格式
  • 针对 Spring 回调接口的 lambda 表达式和方法引用
  • 用于 Spring 数据绑定和格式化的 JSR-310 日期时间值类型
  • 对 JDK 8 参数名称发现机制的初步支持

注意:Spring 对 Java 8 的支持正在进行中,并跟踪 OpenJDK 8 的快照,直到 9 月份的 JDK 8 开发者预览版发布日期(请参阅 http://openjdk.java.net/projects/jdk8/)。我们预计会在那个时间左右发布相应的 Spring Framework 4.0 发布候选版,并在 SpringOne 大会上展示(9 月 9-12 日;请参阅 http://springone2gx.com……

Spring Batch 2.2.0 RC2 现已可用

发布 | Michael Minella | 2013 年 5 月 16 日 | ...

我们很高兴地宣布,Spring Batch 2.2.0.RC2 现已通过 SpringSource 里程碑仓库提供。
Spring Batch 主页 | GitHub 源代码 | 参考文档

此版本修复了 2.2.0.RC1 版本中发布的功能中的错误并进行了改进。您可以在此处的 Spring Batch 更改日志中阅读有关此版本的具体更新信息:2.2.0-RC1 到 2.2.0.RC2

链接

Spring Batch 主页 | GitHub 源代码 | 参考文档

本周 Spring - 2013 年 5 月 14 日

工程 | Josh Long | 2013 年 5 月 15 日 | ...

欢迎阅读新一期《本周 Spring》!本周宣布了一些相当令人兴奋的项目,如果您相信的话,我们的 SpringOne 2012 重播内容 快要用完了!幸好 SpringOne 2013 的议程安排很快就会上线,所以我们可以展望未来。像往常一样,我们有很多内容要介绍,让我们开始吧!

为议程安排上线做准备,许多新的 SpringOne 2013 会议已获接受

  1. Jon Brisbin 宣布了 Reactor 项目。Reactor 项目旨在为基于异步 IO 的应用程序提供坚实的基础,在此基础上,自然可以为 Grails 和 Spring 等技术提供集成。Reactor 已经具备良好的多语言支持,包括 Groovy 和 Java(尤其是即将发布的 Java 8!)务必查看此项目,如果您对它与其他异步技术相比有什么问题,请特别关注评论区!
  2. Spring Security 项目负责人 Rob Winch 一直在忙着增强 Spring Security 和 Spring Security OAuth 的 Java 配置功能。他提供了一个 Spring Security OAuth Java 配置 API 的初稿,我相信他会很感激您对新 DSL 的任何反馈,所以务必查看!干得好,Rob!
  3. 5 月 16 日星期四与 Chris Richardson(《POJOs in Action》作者)的网络研讨会,主题是“分解应用程序以实现可部署性和可伸缩性”。立即注册!
  4. 参加 Broadleaf Commerce 的 Andre Azzolini 于 5 月 28 日星期二举办的网络研讨会,他们将讨论从 GWT 迁移到 SpringMVC 的经验教训
  5. Paul Chapman 在 SpringSource 博客上介绍了 Spring MVC 中丰富多样的内容协商支持
  6. Chris Harris 在 SpringOne2GX 2012 上的演讲,Spring Data MongoDB 项目,现已在 YouTube 上提供高清版本!
  7. Lee Faus 在 SpringOne2GX 2012 上的演讲,极限改造 - 应用程序版,现已在 YouTube 上提供高清版本!
  8. JIWHIZ 博客和博主袁霁写了一篇不错的文章,介绍了 Spring 的 Java 配置支持
  9. 这篇文章——来自博主 Chris Wong 在一月份发表的名为“JmsTemplate 并不邪恶”的文章——解释了使用 Spring 的 CachingConnectionFactory 和原始的 ConnectionFactory 的一些微妙之处,然后,为了获得额外的启发,介绍了一种显著加速 ActiveMQ 的方法。
  10. HMKCode 博客有一篇精彩、详尽的文章,介绍了如何将 jQuery-file-upload 插件与 Spring MVC 结合使用
  11. 您看过 HATEOAS 了吗?HATEOAS 是一种设计模式,一种构建更好的 RESTful Web 服务的方法。Spring HATEOAS 使在 Spring MVC 之上实现这一点变得非常简单,而 Geraint Jones 的这篇博客非常精彩地介绍了 Spring HATEOAS
  12. 博主 Alexey Zvolinskiy 回答了一个常见问题:如何在 Spring MVC 中将复选框绑定到与服务器来回传递的模型对象
  13. 我们的朋友 @baeldung 每天维护一个关于 StackOverflow 上的 Spring 的精彩文章 Twitter feed,我认为他挖掘出了一些非常棒的内容。其中一篇文章回答了我经常被问到的一个问题:如何在运行时枚举所有带有 @Controller 注解的 Spring MVC Bean?
  14. 在浏览 @SpringAtSO 句柄时,我发现的另一篇很棒的文章解释了如何将请求作用域属性传播到当前请求线程之外。这篇文章通常适用于 请求作用域属性需要传播到其原始线程和请求之外的任何情况。

Reactor - JVM 异步应用程序的基础

工程 | Jon Brisbin | 2013 年 5 月 13 日 | ...

我们很高兴地宣布,经过长时间的内部孵化,我们将发布一个用于 JVM 上异步应用程序的基础框架,我们称之为 Reactor。它为 Java、Groovy 和其他 JVM 语言提供了抽象,使构建事件驱动和数据驱动的应用程序变得更容易。它也非常快。在中等硬件上,使用最快的非阻塞 Dispatcher 可以处理每秒超过 15,000,000 个事件。还提供了其他调度器,为开发人员提供从线程池式、长时间运行任务执行到非阻塞等多种选择……

使用 Spring MVC 进行内容协商

工程 | Paul Chapman | 2013 年 5 月 11 日 | ...

使用 Spring MVC 生成输出有两种方法:

  • 您可以使用 RESTful @ResponseBody 方法和 HTTP 消息转换器,通常用于返回 JSON 或 XML 等数据格式。编程客户端、移动应用和支持 AJAX 的浏览器是通常的客户端。
  • 或者,您可以使用视图解析。尽管视图完全能够按您的意愿生成 JSON 和 XML(我的下一篇文章会详细介绍),但视图通常用于为传统 Web 应用程序生成 HTML 等表示格式。
  • 实际上还有第三种可能性——有些应用程序需要两者兼顾,而 Spring MVC 很容易支持这种组合。我们将在最后再次讨论这一点。

无论哪种情况,您都需要处理控制器返回的相同数据的多种表示形式(或视图)。确定要返回哪种数据格式称为内容协商

有三种情况我们需要知道在 HTTP 响应中发送哪种数据格式:

  • HttpMessageConverters: 确定使用哪个合适的转换器。
  • 请求映射: 将传入的 HTTP 请求映射到返回不同格式的不同方法。
  • 视图解析: 选择使用哪个合适的视图。

确定用户请求了哪种格式依赖于 ContentNegotationStrategy。开箱即用提供了默认实现,但您也可以根据需要实现自己的。

在本文中,我想讨论如何使用 Spring 配置和使用内容协商,主要涉及使用 HTTP 消息转换器的 RESTful 控制器。在后面的文章中,我将展示如何专门针对视图使用 Spring 的 ContentNegotiatingViewResolver 设置内容协商……

订阅 Spring 新闻通讯

订阅 Spring 新闻通讯,保持联系

订阅

领先一步

VMware 提供培训和认证,助力您的飞速发展。

了解更多

获取支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,一次简单订阅即可获得。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看全部