使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务(1)
 
- UID
- 1066743
|

使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务(1)
简介随附文章,“使用 Spring 3 构建 RESTful web 服务”(参见 ),介绍了使用 Spring 构建 RESTful web 服务的方式。还解释了如何使用 ContentNegotiatingViewResolver 生成多个具象,这是 RESTful web 服务的一个重要功能。本文还阐述了使用 HttpMessageConverter 生成多个具象的另一种方式,并且本文中的示例展示了如何使用 RestTemplate 和 HttpMessageConverter 与服务进行通信。
Spring MVC 中的 REST 支持本部分提供了支持 RESTful web 服务的主要 Spring 功能(或注释)的概述。
@Controller使用 @Controller 注释对将成为 MVC 中控制器的类进行注释并处理 HTTP 请求。@RequestMapping使用 @RequestMapping 注释对函数进行注释,该函数处理某些 HTTP 方法、URI 或 HTTP 头。此注释是 Spring REST 支持的关键。可以更改 method 参数以处理其他 HTTP 方法。例如:
1
2
| @RequestMapping(method=RequestMethod.GET, value="/emps",
headers="Accept=application/xml, application/json")
|
@PathVariable使用 @PathVariable 注释可将 URI 中的路径变量作为参数插入。例如:
1
2
| @RequestMapping(method=RequestMethod.GET, value="/emp/{id}")
public ModelAndView getEmployee(@PathVariable String id) { … }
|
其他有用的注释使用 @RequestParam 将 URL 参数插入方法中。使用 @RequestHeader 将某一 HTTP 头插入方法中。
使用 @RequestBody 将 HTTP 请求正文插入方法中。
使用 @ResponseBody 将内容或对象作为 HTTP 响应正文返回。
使用 HttpEntity<T> 将它自动插入方法中,如果将它作为参数提供。
使用 ResponseEntity<T> 返回具有自定义状态或头的 HTTP 响应。
例如:
1
2
3
| public @ResponseBody Employee getEmployeeBy(@RequestParam("name")
String name, @RequestHeader("Accept") String accept, @RequestBody String body) {…}
public ResponseEntity<String> method(HttpEntity<String> entity) {…}
|
参见 Spring 文档(参见 ) 获得可插入方法中的支持注释或对象的完整列表。
多具象支持使用不同 MIME 类型表示同一资源是 RESTful web 服务的一个重要方面。通常,可以使用具有不同 "accept" HTTP 头的同一 URI 提取具有不同表示的资源。还可以使用不同的 URI 或具有不同请求参数的 URI。
“使用 Spring 3 构建 RESTful web 服务”(参见 )介绍了 ContentNegotiatingViewResolver,可以挑选不同的视图解析器处理同一 URI(具有不同的 accept 头)。因此,ContentNegotiatingViewResolver 可用于生成多个具象。
还有另一种方式可生成多具象 — 将 HttpMessageConverter 和 c@ResponseBody 注释结合起来使用。使用这种方法无需使用视图技术。 |
|
|
|
|
|