Spring Boot開發中的常用註解的介紹
一、簡言
在spring boot的開發中常常會用到註解 @RequestParam、@PathVariable、@RequestBody、@PageableDefault、@RequestMapping、@GetMapping 和 @PostMapping定義提供給前端的介面函式。下面將會對這些註解進行說明。
二、註解說明
@PathVariable :繫結URI模板變數值,用來獲得url中的動態引數值。使用示例參考如下:
提供給前端的URL:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
後端介面程式碼如下:
@RequestMapping("/hello/{id}")
public String getDetails(@PathVariable(value="id") String id,
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
.......
}
在後端的介面定義中,定義了三個引數id,param1,param2。
@RequestParam:從request裡面拿取值。使用示例參考如下:
提供給前端的URL:
http://localhost:8080/springmvc/hello/101?param1=10¶m2=20
後端提供的介面程式碼如下:
public String getDetails(
@RequestParam(value="param1", required=true) String param1,
@RequestParam(value="param2", required=false) String param2){
...
}
@RequestParam支援四種引數
- defaultValue如果本次請求沒有攜帶這個引數,或者引數為空,那麼就啟用預設值。
- name繫結本次引數的名稱,要跟URL上面的一樣
- required這個引數表明,引數值是不是必須的,true表示必須不能為空,false表示不是必須可以為空
- value 跟name一樣的作用,是name屬性的一個別名。
@RequestBody :主要用來處理Content-Type是application/json,application/xml的Json字串。多用在Post型別請求中。
Pageable:是Spring Data庫中定義的一個介面,該介面是所有分頁相關資訊的一個抽象,通過該介面我們可以得到和分頁相關所有資訊,其中比較重要的資訊包括兩個:一個分頁的資訊,一個是排序的資訊。
page:第幾頁,從0頁開始,預設為第0也
size:每一頁的大小,預設為20
sort:排序相關資訊,以property,property(ASC|DESC)的方式組織,例如sort=firstname&sort=lastname,desc表示
@PageableDefault:表示spring data提供給我們個性化設定pageable預設配置。比如@PageableDefault(value = 15, sort = {“id”}, direction = Sort.Direction.DESC)就表示預設情況下我們按照id倒序排列,每一頁的大小為15。
@ResponseBody
@RequestMapping(value = "list", method=RequestMethod.GET)
public Page<blog> listByPageable(@PageableDefault(value = 15, sort = { "id" }, direction = Sort.Direction.DESC)
Pageable pageable) {
return blogRepository.findAll(pageable);
}
@RequestMapping :主要將HTTP請求對映到MVC和REST控制器的處理方法上,可以具體細分為一下幾類:
1.將特定的請求或者請求模式對映到一個控制器上,甚至還可以具體到方法級別的對映上,參考如下:
@RestController
@RequestMapping("/home") // /home/*的請求會由IndexController 進行處理
public class IndexController {
@RequestMapping("/") // /home的請求會由get()方法來處理
String get() {
//mapped to hostname:port/home/
return "Hello from get";
}
@RequestMapping("/index") // /home/index的請求會由index()來處理
String index() {
//mapped to hostname:port/home/index/
return "Hello from index";
}
}
2.可以處理多個URL,比如將多個請求對映到一個方法上去,參考如下:
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = {
"",
"/page",
"page*",
"view/*,**/msg"
})
String indexMultipleMapping() {
return "Hello from index multiple mapping.";
}
}
在上述程式碼中,如下URL都會由indexMultipleMapping()來處理:
/home
/home/
/home/page
/home/pageabc
/home/view/
/home/view/view
3.用@RequestMapping處理HTTP的各種方法,如GET、PUT、POST、DELETE以及PATCH。以POST的方法為例,參考如下:
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(method = RequestMethod.POST)
String post() {
return "Hello from post";
}
}
[email protected]可以通過定義生產物件produces和消費物件consumes來進一步縮小對映型別的範圍。參考如下:
@RestController
@RequestMapping("/home")
public class IndexController {
@RequestMapping(value = "/prod", produces = {
"application/JSON"
})
@ResponseBody
String getProduces() { //getProduces()方法會產生一個JSON的響應
return "Produces attribute";
}
@RequestMapping(value = "/cons", consumes = {
"application/JSON",
"application/XML"
})
String getConsumes() { //getCOnsumes()方法可以同時處理請求中的JSON和XML內容
return "Consumes attribute";
}
}
@GetMapping和@PutMapping:是@RequestMapping的快捷方式,比如@GetMapping所扮演的是@RequestMapping(method=RequestMethod.GET)的一個快捷方式。
三、參考資料
1.@RequestParam,@RequestBody,@PathVariable等註解區別
2.SpringMVC @RequestBody @RequestParam @PathVariable 等引數繫結註解詳解
3.springmvc 通過 Pageable物件和PageableDefault註解獲取分頁資訊
4.超詳細 Spring @RequestMapping 註解使用技巧