领先一步
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
都分配了一个默认名称。例如,FooController
中的方法 handleFoo
默认分配“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 标记模板(在 Groovy 2.3 中可用)进行视图渲染的支持。如果您一直在等待 DRY 标记,类似于 HAML(Ruby on Rails),那么这个适合您。
Spring MVC 测试相关
JSON Assert 作为使用 JSONPath 的额外选项,就像使用 XMLUnit 对 XML 进行操作一样。
MockMvcConfigurer
的帮助下创建。添加此功能是为了简化 Spring Security 设置,但可用于封装任何第三方框架或项目中的通用设置。
MockRestServiceServer
现在支持 AsyncRestTemplate
进行客户端测试。Spring MVC Test HtmlUnit 扩展(单独的项目)也一直在稳步发展,并发布了 M1 里程碑版本。如果您对此感兴趣,请查看该项目的首页。
Spring Framework 4.1 即将到来(8 月底),而 SpringOne 2GX 2014 也将于 9 月初在德克萨斯州达拉斯举行。仔细查看这些改进,看看它们是否满足您的需求,或者是否需要进一步改进。欢迎参加今年的 SpringOne,我们在 Web 和 JavaScript 轨道上安排了精彩的阵容。