了解如何利用SpringMVC的注釋創建RESTful Web服務。
Spring的基於注釋的MVC框架簡化了創建RESTful Web服務的過程。傳統的Spring MVC控制器和RESTful Web服務控制器之間的關鍵區別在於: 創建HTTP響應主體的方式。
雖然傳統的MVC控制器依賴於View技術,但RESTful Web服務控制器只返回對象,對象數據作為JSON / XML直接寫入HTTP響應。
以下步驟描述了典型的Spring MVC REST工作流:
- 客戶端以URI形式向Web服務發送請求。
- 該請求被DispatcherServlet攔截,該服務器查找Handler Mappings及其類型。
- 應用程序上下文文件中定義的Handler Mappings部分告訴DispatcherServlet使用哪種策略根據傳入請求查找控制器。
- Spring MVC支持三種不同類型的映射請求URI到控制器:注釋,名稱約定和顯式映射。
- 請求由Controller處理,響應返回到DispatcherServlet,然后DispatcherServlet將調度到視圖。
使用@Controller時需要用@ResponseBody注釋
Spring 3.x 或使用@Controller情況下,在方法上使用@ResponseBody注釋時,Spring會轉換返回值並自動將其寫入HTTP響應。Controller類中的每個方法都必須使用@ResponseBody進行注釋。
Spring有一個在后台注冊的HttpMessageConverters列表。HTTPMessageConverter的職責是將請求主體轉換為特定類並再次返回響應主體,具體取決於預定義的mime類型。每次發出請求命中@ResponseBody時,Spring都會遍歷所有已注冊的HTTPMessageConverters,尋找符合給定mime類型和類的第一個,然后將其用於實際轉換。
@Controller @RequestMapping("employees") public class EmployeeController { Employee employee = new Employee(); @RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json") public @ResponseBody Employee getEmployeeInJSON(@PathVariable String name) { employee.setName(name); employee.setEmail("employee1@genuitec.com"); return employee; } @RequestMapping(value = "/{name}.xml", method = RequestMethod.GET, produces = "application/xml") public @ResponseBody Employee getEmployeeInXML(@PathVariable String name) { employee.setName(name); employee.setEmail("employee1@genuitec.com"); return employee; } }
注意@ResponseBody添加到返回值中的每個@RequestMapping方法,Spring將做兩件事:
- 將<context:component-scan> 和 <mvc:annotation-driven /> 標記添加 到Spring配置文件中。
- <context:component-scan> 激活注釋並掃描包以在應用程序上下文中查找和注冊bean。
- <mvc:annotation-driven/> 如果Jackson / JAXB庫在類路徑上,則添加對讀寫JSON / XML的支持。
- 對於JSON格式,包括jackson-databind jar,對於XML,包括項目類路徑的jaxb-api-osgi jar。
- 將<context:component-scan> 和 <mvc:annotation-driven /> 標記添加 到Spring配置文件中。
- 可在任何服務器(例如,Tomcat)上部署並運行應用程序。
http://localhost:8080/SpringRestControllerExample/rest/employees/Bob 並顯示輸出JSON.
http://localhost:8080/SpringRestControllerExample/rest/employees/Bob.xml 輸出XML
使用@RestController
Spring 4.0引入了@RestController,這是一個控制器的專用版本,它是一個方便的注釋,除了自動添加@Controller和@ResponseBody注釋之外沒有其他新魔法。
通過使用@RestController批注對控制器類進行注釋,您不再需要將@ResponseBody添加到所有請求映射方法中。@ResponseBody注釋默認處於活動狀態。
要在我們的示例中使用@RestController,我們需要做的就是將@Controller修改為@RestController並從每個方法中刪除@ResponseBody。結果類應如下所示:
@RestController public class EmployeeController { Employee employee = new Employee(); @GetMapping("/employees/{name}") public Employee getEmployeeInJSON(@PathVariable("name") String name) { employee.setName(name); employee.setEmail("employee1@genuitec.com"); return employee; } }
我們不再需要將@ResponseBody添加到請求映射方法中。進行更改后,再次在服務器上運行應用程序會產生與以前相同的輸出。
使用@RestController非常簡單,這是從Spring v4.0開始創建MVC RESTful Web服務或基於SpringBoot 2的首選方法。
本文轉載自:https://www.jdon.com/50892