Spring Boot簡明教程之Web開發.md
Spring Boot簡明教程之Web開發
在前面的文章中,我們已經大致介紹了有關Spring Boot的專案配置等資訊,我們也體會到了Spring Boot對於Web開發的支援。在這篇文章中,我們將介紹Spring Boot對於Web開發的支援:
Controller的使用
在MVC型別的專案開發中,控制器(Controller)是十分重要的一個環節,其中,最重要的就是下面四個註解:
註解 | 解釋 |
---|---|
@Controller | 處理請求 |
@ResponseBody | 將返回的資料轉換為 JSON 格式 |
@RestController | @[email protected] |
@RequestMapping | 配置URL對映 |
請求處理:@RestController
控制器(Controller)是MVC架構中最重要的一環,同時JSON對於前後端分離的專案中,前後端資料交流的重要傳輸方式,對於這二者的支援,對於Web開發來說是十分重要的。我們都知道@Controller用於處理http請求,而@ResponseBody是將資料轉換為JSON資料,而@RestController就更像是兩者的結合。
例如:
@RestController
public class HelloController {
@RequestMapping ("/hello")
public String hello(){
return "hello";
}
}
我們在瀏覽器輸入:http://localhost:8080/hello
成功訪問,但是如果我們將@RestController更改為@Controller,就會發現:訪問報錯,大概意思就是我們缺少檢視的訪問模板,這是因為@Controller更多時候是搭配著檢視模板進行使用(這點我們會在後面進行詳細的介紹)
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
當我們加上@ResponseBody後,訪問又再次成功。
@Controller
@ResponseBody
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
這就是證明了:@[email protected][email protected]。
當我們進入@RestController原始碼檢視時,發現:再次印證了這一點
路由設定:@RequestMapping
【@RequestMapping】 用於配置URL對映,即可配置與類,也可以配置與方法。配置於類表示該類訪問的父路徑,配置於方法則表示該方法的實際對映地址。
該註解有三個常用的屬性:value、method 和 produces。
屬性 | 說明 |
---|---|
value | 指定請求的實際地址,可以省略不寫 |
method | 指定請求的型別,預設為 GET |
produces | 指定返回內容型別,如 produces = "application/json; charset=UTF-8" |
例如,我們將之前的HelloController更改為:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public String hello(){
return "hello";
}
}
我們就發現,訪問的地址已經變成了:http://localhost:8080/test/hello
如果我們想讓多個URL能訪問同一個方法,應該怎麼做呢?
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = {"/hello","hello2"})
public String hello(){
return "hello";
}
}
我們就發現:地址變成了一個數組,只要是這個陣列內的url均能訪問該方法。
如果我們想指定訪問的方法:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello" ,method = RequestMethod.POST)
public String hello(){
return "hello";
}
}
再次啟動,我們就發現:訪問方法被限制為【POST】
如果我們再在瀏覽器輸入:http://localhost:8080/test/hello
訪問,就會被拒絕:
除此之外呢,還有更加簡便的方式來實現請求方式的限制:
註釋 | 解釋 |
---|---|
@DeleteMapping | DELETE方法 |
@GetMapping | GET方法 |
@PutMapping | PUT方法 |
@PostMapping | POST方法 |
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
// @RequestMapping(value = "/hello" ,method = RequestMethod.GET,produces = "application/json; charset=UTF-8")
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
啟動:效果和 @RequestMapping一樣,而且更加簡潔。
引數獲取
對於引數獲取,主要使用的是下面三個註解:
註解 | 說明 |
---|---|
@PathVariable | 獲取 URL 引數 |
@RequestParam | 從 Request 裡獲取引數值 |
@RequestBody | 獲取JSON實體 |
@PathVariable
使用@PathVariable獲取引數,更多的是針對http://localhost:8080/test/hello/{phone}
這類動態引數,例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello/{phone}")
public Integer phone(@PathVariable Integer phone ){
return phone;
}
}
啟動專案,並在瀏覽器輸入:http://localhost:8080/test/hello/546
如果有多個動態引數:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello/{phone}/{name}")
public String phone(@PathVariable Integer phone,@PathVariable String name){
return "電話:"+ phone +"\n"+ "姓名: " + name;
}
}
啟動專案,在瀏覽器輸入:http://localhost:8080/test/hello/546/name
這樣就獲取了多個引數,但是需要注意的是: URL 中的引數和方法中的引數名需要保持一致。如果不同,那麼就需要指定URL中的引數名來獲取,例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello/{phone}/{name}")
public String phone(@PathVariable(value = "phone") Integer myPhone,@PathVariable String name){
return "電話:"+ myPhone +"\n"+ "姓名: " + name;
}
}
這裡就不再展示執行結果。
@RequestParam
@RequestParam獲取引數主要針對URL為:http://localhost:8080/test/hello/?phone=456
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public Integer phone(@RequestParam Integer phone){
return phone;
}
}
啟動專案,輸入:http://localhost:8080/test/hello/?phone=456
但需要注意的是,如果URL 中的引數和方法中的引數名不一致,仍然需要指定引數名,例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public Integer phone(@RequestParam(value = "phone") Integer myPhone){
return myPhone;
}
}
這裡就不再演示執行結果。同時@RequestParam還有兩個常用的屬性:
屬性 | 說明 |
---|---|
required | 引數是否為必須,True 表示為必須; |
defaultValue | 預設值,當獲取到的引數為Null時使用 |
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello")
public Integer phone(@RequestParam(value = "phone",required = false,defaultValue = "139") Integer myPhone){
return myPhone;
}
}
啟動專案,瀏覽器輸入:http://localhost:8080/test/hello/
我們發現,當我們為傳值時,返回的我們設定的預設值:139。
@RequestBody
@RequestBody主要用來獲取前端傳來的封裝好的Json格式的引數。
例如:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/hello",method = RequestMethod.POST)
public String hello( @RequestBody String str){
return str;
}
}
然後,我們使用Postman進行Post請求測試(因為瀏覽器不方便對Post請求進行測試,Postman是後端開發中比較常用的介面測試工具,官網地址)
Json的使用
我們在上文提到過,@RestController可以將返回引數轉為Json格式。那麼我們現在就來感受下Spring Boot對於Json的支援。
實體類
建立如下的目錄結構
其中,Person類為:
package cn.newtol.springboot05.entity;
/**
* @Author: REN
* @Description:
* @Date: Created in 20:10 2018/9/17
*/
public class Person {
private String name;
private Integer phone;
public Person(String name, Integer phone) {
this.name = name;
this.phone = phone;
}
...
/* 省略get、set方法 */
}
HelloController為:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/person",method = RequestMethod.GET)
public Person person(){
Person person = new Person("ABC",456);
return person;
}
}
啟動專案,瀏覽器輸入:http://localhost:8080/test/person
List
將HelloController改為:
@RestController
@RequestMapping(value = "/test")
public class HelloController {
@RequestMapping(value = "/list",method = RequestMethod.GET)
public List<String> list(){
List<String> lists = new ArrayList<>();
lists.add("abc");
lists.add("cdf");
return lists;
}
}
啟動專案,瀏覽器輸入:http://localhost:8080/test/list
我們就成功的將List轉換為了Json格式,對於其他的資料型別,我們就不再進行演示,有興趣的小夥伴可以自行進行測試。
總結
我們主要介紹了Spring Boot對於Web開發的一些支援,其中主要介紹了:@RestController 、 @RequestMapping、@PathVariable 、@RequestParam 、@RequestBody五個註解,以及演示了一下Spring Boot對於Json的支援。