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 都分配了一个默认名称。例如,FooController 中的方法 handleFoo 默认分配“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 标记模板(在 Groovy 2.3 中可用)进行视图渲染的支持。如果您一直在等待 DRY 标记,类似于 HAML(Ruby on Rails),那么这个适合您。

Spring MVC 测试相关

  • JSON 响应可以使用

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

  • MockMvcBuilder“食谱”现在可以在 MockMvcConfigurer 的帮助下创建。

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

  • MockRestServiceServer 现在支持 AsyncRestTemplate 进行客户端测试。

Spring MVC Test HtmlUnit 扩展(单独的项目)也一直在稳步发展,并发布了 M1 里程碑版本。如果您对此感兴趣,请查看该项目的首页。

Spring Framework 4.1 即将到来(8 月底),而 SpringOne 2GX 2014 也将于 9 月初在德克萨斯州达拉斯举行。仔细查看这些改进,看看它们是否满足您的需求,或者是否需要进一步改进。欢迎参加今年的 SpringOne,我们在 Web 和 JavaScript 轨道上安排了精彩的阵容。

获取 Spring Newsletter

与 Spring Newsletter 保持联系

订阅

领先一步

VMware 提供培训和认证,助您快速提升。

了解更多

获取支持

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

了解更多

即将举行的活动

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

查看全部