最近在Spring官網上發現,Spring 2.5發布不久,Spring3.0項目已經是開始進行了。
包括很多新功能,如標題中提到的Restful的支持,還有Servlet3.0的支持等。
大概總結了一下,Spring3.0中會包括以下一些新特性:
- 1. Full scale REST support by means of additions to the Spring MVC API
- already pretty detailed, and apparently going to be included in the
first milestone release
- 2. Support for Unified EL (as seen in Spring Web Flow) - very likely part of 3.0, but no details given
- 3. Annotation support for declaring factory methods - as above
- 4 .Support for Portlet 2.0 (JSR 286), including resource requests (ResourceServingPortlet) - as above
- 5. "Preparations" for Servlet 3.0 specification - sounded a lot like architectural preparations not visible to the "consumer"
- 6. Something to fill the gap between Spring Web Flow and Spring MVC - that sounded very vague
- 7. Inclusion (probably generalisation) of the repeat, retry and resume semantics provided by Spring Batch - was only hinted at, no details given
- 8. Inclusion of the OXM support provided by Spring WS - sounded pretty definitive, but no details given
- 9. Some kind of site definition language for the web stack - no idea whether this is more than a rumour
- 10. Model-based validation for use both in server and client - as above
下面我們具體介紹一下Restful該特性.
剛才我也提到了,Spring3.0是基于其目前提供的Spring MVC框架上引入對Rest的支持,這樣使其可以很好的融合到Spring中。
下面有一段代碼,大家看了會更有體會。
先看一下如何發布Rest風格的服務接口
1 @RequestMapping(value = "/gadgets/{id}",
2 method = RequestMethod.GET)
3 public View getGadget(@PathParam String id) {
4 // 功能是根據 id 查詢 Gadget對象
5 // 返回View對象
6 }
7
看到使用Annotation方式,代碼非常簡潔。@RequestMapping是對訪求的資源進行服務的綁定, value指定服務的資源路徑, method是指Rest風格中的CRUD的方法。
@PathParam是對資源路么參數的解析,它會自動根據提交的數據格式,解析參數值。
下面來看一下
RestTemplate,對Rest服務接口的調用.
1 // 使用getForObject執行查詢操作
2 // (指定參數提交方式)
3 RestTemplate template = new RestTemplate();
4 Gadget gadget = template.getForObject(
5 "http://www.springify.com/gadgets/{id}",
6 Gadget.class, 1);
7
8 // 使用postForLocation 執行新增操作
9 // (指定參數提交方式,使用Map對象)
10 Map<String, String> params =
11 new HashMap<String, String>();
12 params.put("id", 42);
13 URI uri = template.postForLocation(
14 "http://www.springify.com/gadgets/{id}/features",
15 new Feature("Glows in the dark."), params);
16
17 // 刪除操作的演示
18 template.delete(
19 "http://www.springify.com/gadgets/{id}", someId);
20
21
29
總結:可以看到使用Rest風格的服務發布,可以對服務資源進行統一的管理,使用發布的接口更清晰。
當然在Spring 3.0 發布之前,上述的API,annotation可能會有變動,我們也期待Spring能與我們早日見面。
最后,由于本人對Rest技術了解還不是太深入,也希望大家能多提些意見和建議。
Good Luck!
Yours Matthew!