1. 程式人生 > >Spring Boot簡明教程之Web開發.md

Spring Boot簡明教程之Web開發.md

Spring Boot簡明教程之Web開發

在前面的文章中,我們已經大致介紹了有關Spring Boot的專案配置等資訊,我們也體會到了Spring Boot對於Web開發的支援。在這篇文章中,我們將介紹Spring Boot對於Web開發的支援:

Controller的使用

在MVC型別的專案開發中,控制器(Controller)是十分重要的一個環節,其中,最重要的就是下面四個註解:

註解 解釋
@Controller 處理請求
@ResponseBody 將返回的資料轉換為 JSON 格式
@RestController @[email protected]
[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的支援。

原始碼地址

原始碼地址

關注博主的個人公眾號,有更多視訊學習資源分享~