Spring Framework 4.1 -- Spring MVC 改进

工程 | Rossen Stoyanchev | 2014年7月28日 | ...

最近,Juergen Hoeller 宣布了 4.1 版本两个候选版本中的第一个已可用。Brian Clozel 随后发表了一篇关于静态 Web 资源处理增强功能的文章。此前,Stephane Nicoll 撰写博客介绍了 缓存JMS 相关改进。本文旨在总结 Spring MVC 的改进。

JDK 1.8 的 java.util.Optional 现在支持作为 @RequestParam@RequestHeader@MatrixVariable 控制器方法的参数,而 ListenableFuture 支持作为 DeferredResult 的替代返回类型,适用于底层服务(或可能是对 AsyncRestTemplate 的调用)已经返回 ListenableFuture 的情况。

Jackson 的 @JsonView 现在直接支持在 @ResponseBodyResponseEntity 控制器方法上使用,用于序列化同一 POJO 的不同详细程度,例如摘要页与详细页。通过将序列化视图类型作为模型属性添加到特殊键下,基于 View 的渲染也支持此功能。

JSONP 现在支持与 Jackson 一起使用。对于响应体方法,请按照下面所示声明一个 @ControllerAdvice。对于基于 View 的渲染,只需在 MappingJackson2JsonView 上配置 JSONP 查询参数名称即可。

@ControllerAdvice
private static class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {

    public JsonpAdvice() {
        super("callback");
    }

}

请注意,@ControllerAdvice 是在 3.2 中引入的,用于在所有或部分控制器之间共享的 @ExceptionHandler@ModelAttribute@InitBinder 方法。ResponseEntityExceptionHandler 是全局异常处理的一个示例,通过将错误详细信息写入响应体。在 4.1 中,@ControllerAdvice 还可以实现 ResponseBodyAdvice,在这种情况下,它将在控制器方法返回之后、但在响应写入和提交之前被调用。这有很多有用的应用,@JsonView 和 JSONP 已经是基于它的两个示例。

两种新的 HttpMessageConverter 类型

  • Gson -- 更小的占用空间

比 Jackson 更轻量;已在 Spring Android 中使用。

(刚好错过了 RC1,但已包含在 4.1 RC2 的 master 分支中)-- 作为企业内部服务间通信的数据协议,它高效且有效,也可以以 JSON 和 XML 格式暴露给浏览器。这是由 Alex Antonov 贡献的。

MvcUriComponentsBuilder 在 4.0 中引入,作为一种通过控制器方法调用(类似于模拟测试)构建指向控制器方法的链接的方式。在 4.1 中,诸如 JSP 的视图也可以通过引用其映射名称来构建指向控制器的链接。默认情况下,每个 @RequestMapping 都被分配一个默认名称。例如,方法 handleFooFooController 默认被分配 "FC#handleFoo",但命名策略是可定制的,也可以通过 @RequestMapping 上的新 name 属性显式设置。新的 mvcUrl Spring JSP 标签使其在 JSP 页面中易于使用。对于任何其他视图技术也可以这样做。

熟悉的 ResponseEntity 现在有了构建器风格的 API,指导控制器方法准备服务器端响应,例如 ResponseEntity.ok()。对于客户端,还有一个新的 RequestEntity,也提供构建器风格的 API,指导准备客户端 HTTP 请求。

MVC Java 配置和 XML 命名空间

  • 视图解析器配置 -- 如果你曾经需要配置带有

内容协商的视图解析,你可能会喜欢这个功能。请参阅更新的文档

  • 增强的“视图控制器” -- 除了直接将 URL 映射到视图名称

而无需控制器逻辑之外,视图控制器现在内置了对重定向和设置响应状态的支持。应用程序可以使用此功能配置重定向 URL、使用视图渲染 404 响应、发送“无内容”响应等。一些用例在此列出

  • 路径匹配 -- 这些常用的定制功能现已内置

并已反向移植到 4.0。请参阅更新的文档

谈到视图解析,在 4.1 中,我们增加了通过 Groovy 2.3 中可用的Groovy 标记模板进行视图渲染的支持。如果你一直在等待 DRY 标记,类似于 HAML (Ruby on Rails),那么这个功能就是为你准备的。

Spring MVC 测试相关

  • JSON 响应可以使用

JSON Assert 进行断言,作为使用 JSONPath 的额外选项,就像使用 XMLUnit 断言 XML 一样。

  • 现在可以在 MockMvcConfigurer 的帮助下创建 MockMvcBuilder 的“配方”(recipes)。

添加此功能是为了方便应用 Spring Security 的设置,但也可用于封装任何第三方框架或项目内部的通用设置。

  • MockRestServiceServer 现在支持用于客户端测试的 AsyncRestTemplate

Spring MVC Test HtmlUnit 扩展(一个独立项目)也一直在稳步进展,已达到 M1 里程碑。如果你对此感兴趣,请查看该项目的主页。

Spring Framework 4.1 即将发布(八月底),SpringOne 2GX 2014 也将于九月初在德克萨斯州达拉斯举行。请仔细查看这些改进,看看它们是否满足您的需求,或者是否需要进一步改进。欢迎参加今年的 SpringOne,我们在 Web 和 JavaScript 领域安排了精彩的内容。

订阅 Spring 新闻快讯

通过 Spring 新闻快讯保持联系

订阅

取得领先

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

了解更多

获取支持

Tanzu Spring 通过一个简单的订阅,为 OpenJDK™、Spring 和 Apache Tomcat® 提供支持和二进制文件。

了解更多

即将举行的活动

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

查看全部