取得领先
VMware 提供培训和认证,助力您的快速发展。
了解更多最近,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
现在直接支持在 @ResponseBody
和 ResponseEntity
控制器方法上使用,用于序列化同一 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
类型
比 Jackson 更轻量;已在 Spring Android 中使用。
(刚好错过了 RC1,但已包含在 4.1 RC2 的 master 分支中)-- 作为企业内部服务间通信的数据协议,它高效且有效,也可以以 JSON 和 XML 格式暴露给浏览器。这是由 Alex Antonov 贡献的。
MvcUriComponentsBuilder
在 4.0 中引入,作为一种通过控制器方法调用(类似于模拟测试)构建指向控制器方法的链接的方式。在 4.1 中,诸如 JSP 的视图也可以通过引用其映射名称来构建指向控制器的链接。默认情况下,每个 @RequestMapping 都被分配一个默认名称。例如,方法 handleFoo
的 FooController
默认被分配 "FC#handleFoo",但命名策略是可定制的,也可以通过 @RequestMapping
上的新 name
属性显式设置。新的 mvcUrl
Spring JSP 标签使其在 JSP 页面中易于使用。对于任何其他视图技术也可以这样做。
熟悉的 ResponseEntity
现在有了构建器风格的 API,指导控制器方法准备服务器端响应,例如 ResponseEntity.ok()
。对于客户端,还有一个新的 RequestEntity
,也提供构建器风格的 API,指导准备客户端 HTTP 请求。
MVC Java 配置和 XML 命名空间
内容协商的视图解析,你可能会喜欢这个功能。请参阅更新的文档。
而无需控制器逻辑之外,视图控制器现在内置了对重定向和设置响应状态的支持。应用程序可以使用此功能配置重定向 URL、使用视图渲染 404 响应、发送“无内容”响应等。一些用例在此列出。
并已反向移植到 4.0。请参阅更新的文档。
谈到视图解析,在 4.1 中,我们增加了通过 Groovy 2.3 中可用的Groovy 标记模板进行视图渲染的支持。如果你一直在等待 DRY 标记,类似于 HAML (Ruby on Rails),那么这个功能就是为你准备的。
Spring MVC 测试相关
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 领域安排了精彩的内容。