2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

如何發送和接收參數?五種參數傳遞方法

更新時間:2022-11-30 來源:黑馬程序員 瀏覽量:

通常情況下,我們可以使用GET或POST來發送請求和數據,但GET和POST兩種方法所攜帶的數據都是比較簡單的數據,接下來在我們這個基礎上,列舉5種比較負責的參數傳遞方法,并對這些參數如何發送,后臺改如何接收做詳細的講解。

常見的參數種類有:

 ·普通參數

 ·POJO類型參數

 ·嵌套POJO類型參數

 ·數組類型參數

 ·集合類型參數

普通參數

普通參數:url地址傳參,地址參數名與形參變量名相同,定義形參即可接收參數。
普通參數

如果形參與地址參數名不一致該如何解決呢?

發送請求與參數,示例代碼如下:

http://localhost/commonParamDifferentName?name=張三&age=18

后臺接收參數:

@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(String userName, int age) {
    System.out.println("普通參數傳遞 userName ==> " + userName);
    System.out.println("普通參數傳遞 age ==> " + age);
    return "{'module':'common param different name'}";
}

因為前端給的是name ,后臺接收使用的是userName ,兩個名稱對不上,導致接收數據失敗:

1669798471507_12.png

使用@RequestParam注解,可以避免接受數據失敗。

@RequestMapping("/commonParamDifferentName")
    @ResponseBody
    public String commonParamDifferentName(@RequestPaam("name") String 
userName, int age) {
    System.out.println("普通參數傳遞 userName ==> " + userName);
    System.out.println("普通參數傳遞 age ==> " + age);
    return "{'module':'common param different name'}";
}

注意:寫上@RequestParam注解框架就不需要自己去解析注入,能提升框架處理性能。

POJO數據類型

簡單數據類型一般處理的是參數個數比較少的請求,如果參數比較多,那么后臺接收參數的時候就比較復雜,這個時候我們可以考慮使用POJO數據類型。

POJO參數:請求參數名與形參對象屬性名相同,定義POJO類型形參即可接收參數此時需要使用前面準備好的POJO類,先來看下User

public class User {
    private String name;
    private int age;
    //setter...getter...略
}

發送請求和參數:

1669798826184_13.png

后臺接收參數:

//POJO參數:請求參數與形參對象中的屬性對應即可完成參數傳遞
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println("pojo參數傳遞 user ==> "+user);
    return "{'module':'pojo param'}";
}

注意:

POJO參數接收,前端GET和POST發送請求數據的方式不變。 請求參數key的名稱要和POJO中屬性的名稱一致,否則無法封裝。

嵌套POJO類型參數

如果POJO對象中嵌套了其他的POJO類,如:

public class Address {
    private String province;
    private String city;
    //setter...getter...略
}
public class User {
    private String name;
    private int age;
    private Address address;
    //setter...getter...略
}

嵌套POJO參數:請求參數名與形參對象屬性名相同,按照對象層次結構關系即可接收嵌套POJO屬性參數發送請求和參數:

1669799111082_14.png

后臺接收參數:

//POJO參數:請求參數與形參對象中的屬性對應即可完成參數傳遞
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
    System.out.println("pojo參數傳遞 user ==> "+user);
    return "{'module':'pojo param'}";
}

注意:

請求參數key的名稱要和POJO中屬性的名稱一致,否則無法封裝。

數組類型參數

舉個簡單的例子,如果前端需要獲取用戶的愛好,愛好絕大多數情況下都是多個,如何發送請求數據和接收數據呢?

數組參數:請求參數名與形參對象屬性名相同且請求參數為多個,定義數組類型即可接收參數,發送請求和參數的示例代碼如下:

1669799243597_15.png

后臺接收參數:

//數組參數:同名請求參數可以直接映射到對應名稱的形參數組對象中
  @RequestMapping("/arrayParam")
  @ResponseBody
  public String arrayParam(String[] likes) {
    System.out.println("數組參數傳遞 likes ==> " + Arrays.toString(likes));
    return "{'module':'array param'}";
}

集合類型參數

數組能接收多個值,那么集合是否也可以實現這個功能呢? 發送請求和參數:

1669802154677_16.png

后臺接收參數

//集合參數:同名請求參數可以使用@RequestParam注解映射到對應名稱的集合對象中作為數據
@RequestMapping("/listParam")
@ResponseBody
public String listParam(List < String > likes) {
    System.out.println("集合參數傳遞 likes ==> " + likes);
    return "{'module':'list param'}";
}

運行會報錯,

1669802264051_71.png

錯誤的原因是:SpringMVC將List看做是一個POJO對象來處理,將其創建一個對象并準備把前端的數 據封裝到對象中,但是List是一個接口無法創建對象,所以報錯。 解決方案是:使用@RequestParam注解

//集合參數:同名請求參數可以使用@RequestParam注解映射到對應名稱的集合對象中作為數據
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List < String > likes) {
    System.out.println("集合參數傳遞 likes ==> " + likes);
    return "{'module':'list param'}";
}

集合保存普通參數:請求參數名與形參集合對象名相同且請求參數為多個,@RequestParam綁定參數關系。對于簡單數據類型使用數組會比集合更簡單些。


分享到:
在線咨詢 我要報名
和我們在線交談!