Spring框架:@RestController與@Controller
瞭解如何利用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時需要用@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。
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的首選方法。
相關文章
- @Controller和@RestController的區別ControllerREST
- @Controller 和 @RestController的區別ControllerREST
- @RestController和@Controller的區別RESTController
- Controller和RestController的區別ControllerREST
- @Controller和@RestController有什麼區別?ControllerREST
- RestController和Controller的區別和異同RESTController
- spring-@response、@RestController、return的關係SpringRESTController
- @RestControllerRESTController
- Spring典型註解-@Controller,@Component,@SpringController
- Spring 的Controller 是單例or多例SpringController單例
- Spring框架 - Spring和Spring框架組成Spring框架
- SpringBoot @RestController詳解Spring BootRESTController
- kubernetes實踐之四十八:Service Controller與Endpoint ControllerController
- 到底什麼是@RestControllerRESTController
- 使用 Spring Boot 和 @WebMvcTest 測試 MVC Web ControllerSpring BootWebMVCController
- 進擊的 Spring Cloud Alibaba —— 框架與服務SpringCloud框架
- (七)Spring Boot Controller的請求引數獲取Spring BootController
- Spring JDBC框架SpringJDBC框架
- 「Spring認證」Spring 框架概述Spring框架
- spring boot 3 的 Controller 必須寫成響應式的嗎? 是否可以依然像 spring boot 2 那樣寫傳統的 ControllerSpring BootController
- 自定義元件重寫框架 artisan 快速建立 Controller 和 Model元件框架Controller
- 自研 PHP 框架 1.1_controller 資料夾說明PHP框架Controller
- Spring GraphQL與Netflix領域圖服務框架整合Spring框架
- MVC與三層框架|Spring的基礎應用MVC框架Spring
- postman 請求引數和 Spring Boot Controller 接受引數PostmanSpring BootController
- Jmeter——ForEach Controller&Loop ControllerJMeterControllerOOP
- 什麼是Spring 框架?Spring 框架有哪些主要模組?Spring框架
- Spring框架詳解Spring框架
- 淺談Spring框架Spring框架
- Spring框架簡介⑩Spring框架
- Spring框架簡介⑨Spring框架
- Spring框架簡介⑧Spring框架
- Spring框架簡介⑦Spring框架
- Spring框架簡介⑥Spring框架
- Spring框架簡介⑤Spring框架
- Spring框架簡介④Spring框架
- Spring框架簡介③Spring框架
- Spring框架簡介②Spring框架