由於筆者本身大多數的開發經驗都是在 RESTful API 的範疇,所以今天主要想分享 @RestController
註解的使用方式。日後有機會再來介紹 @Controller
註解在傳統Web應用中的使用方式。
@RestController
常常搭配其他Bean一起使用,例如 @RequestMapping
註解,它是一個可以使用在類別(Class)或類別內其他方法(Function)上的註解。如果將此註解用在類別上, 它會將特定的請求映射到該Controller內,之後也可以在其他方法上添加該註解, 用來進一步指定到處理該請求的方法內。
同時於Class和Function使用 @RequestMapping
的範例如下:
@RestController
@RequestMapping("/Controller")
public class SpringController {
@RequestMapping(value = "/Hello")
@RequestBody
public String exampleController() {
String str = "Hello Word !";
return "Get Response = " + str
}
}
在 @RequestMapping
中包含了許多屬性,除了設定指定請求的路徑(value屬性)外,還有其他屬性可以指定,透過這些屬性的組合和設定,讓符合條件的訪問才能夠執行。
以下為 @RequestMapping
中可以設定的屬性:
1.value: 定義發起請求的實際地址
2.params: 定義發起的請求中必須 包含 哪些參數 或是不包含 哪些參數
3.method: 在發起request時就會指定該請求的方法為何,在method屬性設定請求的類型,可以用於限制請求的方式。如果沒有設定method屬性,表示此mapping接受所有請求的方法。 method屬性包括了GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等類型,而GET、POST則是在開發中較常被使用方法類型。
4.consumes: 對應到Http Request Header的Content-Type,可以限制接受請求內容的類型,例如application/json, application/text, application//html等。
5.produces: 對應到Http Request Header的Accept,指定回傳内容的類型。當請求Header中的(Accept)包含該指定類型才會返回,也代表cilent端能夠接收的類型。
@RequestMapping
是一個通用的註解,表示它可以接受/處理各種類型的請求,而像是 @GetMapping
和 @PostMapping
等註解就是專門用來處理特定類型的請求。