spring-boot如何去獲取前端傳遞的參數

本文主要討論spring-boot如何獲取前端傳過來的參數,這些參數主要有兩大類,一類是URL裏的參數,一個是請求body裏的參數html

url裏的參數

經過url裏傳過來的參數通常有三種方式,下面咱們來看一下前端

  • 路徑參數

路徑參數就是說在請求路徑裏攜帶了幾個參數,好比有一個查詢banner詳情的接口,/v2/banner/123,這裏的123就是參數,能夠表示banner的ID。java

下面咱們設計了一個簡陋的接口,來演示路徑參數的獲取spring

@RestController
@RequestMapping(value = "/v2/banner")
public class BannerController {

    @GetMapping("/{id}")
    public Integer getBannerDetail(@PathVariable Integer id){
        return id;
    }
}

獲取banner詳情完整接口路徑是/v2/banner/{id},這裏的id就是路徑參數,在方法的傳參裏,用@PathVariable註解標明那個參數用來接收請求路徑傳遞過來的值,經過postman發個請求看看json

image-20200512231356185

這裏要注意,接口路由裏定義的參數名要和方法參數裏的定義名字要同樣,若是不同須要經過@PathVariable來指定**app

@GetMapping("/{id}")
public Integer getBannerDetail(@PathVariable(name = "id") Integer id12){
    return id12;
}
  • 查詢參數

查詢參數就是請求的url裏?號後面跟的鍵值對,好比/v2/banner?id=123,下面咱們從新定義一個藉口,採用查詢參數的形式獲取banner詳情spring-boot

image-20200512231905390

請求url裏的查詢參數經過@RequestParam註解能夠和方法裏的參數進行一一對應,好比如今有這麼個url:/v2/banner?id=123&pos=3,那麼接口的參數定義就得是@RequestParam Integer id, @RequestParam Integer pos,請求上面定義的接口看看返回值post

image-20200512232224434

  • 路徑參數和查詢參數結合

路徑參數和查詢時能夠同時使用的,那在定義接口的時候,同時使用這兩種註解就行,好比下面的接口性能

@GetMapping("/{id}")
public Map<String, Object> getBannerDetail(@PathVariable Integer id, @RequestParam Integer pos){
    Map<String, Object> body = new HashMap<>();
    body.put("id", id);
    body.put("pos", pos);
    return body;
}

請求一下接口測試

image-20200512232535782

請求body裏的參數

先來思考一個問題,當前端傳遞過來一個json的數據,咱們的方法經過什麼樣的形式可以接受到參數呢?

通常來講有兩種形式,Map和自定義對象,下面咱們分別來介紹一下。

  • Map

設計簡單的banner建立接口,參數經過Map來接收,建立成功後,添加一個id,而後將傳遞的數據和id一塊兒返回

@PostMapping(value = "/create")
public Map<String, Object> createBanner(@RequestBody Map<String, Object> banner){
    banner.put("id", 1243);
    return banner;
}

這裏@RequestBody的這個註解來將body裏的參數,轉化成一個map,請求一下接口看看正常不:

image-20200512233539544

上面咱們使用的Map,它是一個接口,在具體接收數據的時候,確定會用一個Map的實現類,這就會設計到裝箱拆箱的過程,那麼頻繁的裝箱拆箱會有必定到的性能損耗,因此這種方式通常並不推薦使用。

  • 自定義對象Dto

咱們將接收請求參數的對象稱做爲數據傳輸對象,通常定義爲XXXDto,這裏咱們定義一個建立banner時用來接收參數的對象BannerCreateDto.

public class BannerCreateDto {
    private String name;
    private Integer pos;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getPos() {
        return pos;
    }

    public void setPos(Integer pos) {
        this.pos = pos;
    }
}

在Controller具體使用:

@PostMapping(value = "/create")
public Map<String, Object> createBanner(@RequestBody BannerCreateDto dto){
    Map<String, Object> res = new HashMap<>();
    res.put("id", 10000);
    res.put("name", dto.getName());
    res.put("pos", dto.getPos());
    return res;
}

用@RequestBody標記BannerCreateDto對象,spring-boot會自動調用對象的getter和setter給他賦值。咱們請求一下看看:

image-20200512234718559

總結

以上就是咱們對spring-boot進行參數接收時處理方式的討論,包括路徑參數以及查詢參數,還有body參數的接收,下篇文章咱們將討論一下參數的校驗,敬請關注!!

> 本文連接:https://www.immortalp.com/articles/2020/05/13/1589299551179.html

歡迎你們去 個人博客 瞅瞅,裏面有更多關於測試實戰的內容哦!!

相關文章
相關標籤/搜索