最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中Controller的傳參方式詳細講解

 更新時間:2024年01月31日 15:33:13   作者:一縷82年的清風  
這篇文章主要介紹了SpringBoot在Controller層接收參數(shù)的常用方法,Controller接收參數(shù)的常用方式總體可以分為三類,第一類是Get請求通過拼接url進行傳遞,第二類是Post請求通過請求體進行傳遞,第三類是通過請求頭部進行參數(shù)傳遞,下面我們來詳細看看

前言

SpringBoot整合SpringMvc其實千面一直講的都是。只需要我們在pom文件中引入 web的starter就可以了,然后我們就可以正常使用springMvc中的功能了。所以本篇文章可能更多的是回顧,回顧一下springMVC中的一些常用的功能。

按照正常的流程,我們應該先講一講怎么配置視圖解析器,但是已經(jīng)提到了,現(xiàn)在都是前后端分離的項目,后端無需配置頁面跳轉,只需要返回數(shù)據(jù)即可,所以這一部分也沒必要再講了。那咱么就介紹下Controller中的常用寫法。

上一次我們介紹了 @RestController 注解,這個注解會把所有的返回結果以json(json其實不太準確,應該是可序列化對象,大部分是json形式)的形式進行返回。我們今天來舉個例子。

關于@RestController注解

Controller代碼:

@RestController
public class SecondController {
    @RequestMapping("/second")
    public User second(){
        User u = new User("張勝男", 30,"女");
        return u;
    }
}

這里返回了一個User類。 User類代碼如下:

package com.lsqingfeng.springboot.vo;
public class User {
    private String name;
    private Integer age;
    private String gender;
    public User(String name, Integer age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
}

訪問:http://localhost:9090/second 得到結果:

看到了返回的就是json類型的數(shù)據(jù)。這就是 @RestController的作用。如果不用@RestController,我們在方法上加上@ResponseBody是同樣的效果。 @RestController注解就是@Controller和@ResponseBody 的組合。

關于@RequestMapping注解

@RequestMapping注解主要用于標識該Controller的請求地址路徑。比如上面路徑中的@RequestMapping("/second") 就代表通過 /second可以訪問到這個接口。這個注解既可以放在類上,也可以放到方法上,如果類上也有這個注解,那么類中所有的controller在訪問的時候,都要帶上類上的路徑才可以訪問到。比如:

@RestController
@RequestMappin("/test")
public class SecondController {
    @RequestMapping("/second")
    public User second(){
        User u = new User("張勝男", 30,"女");
        return u;
    }
    @RequestMapping("/third")
    public User third(){
        User u = new User("張勝", 50, "男");
        return u;
    }
}

比如上面的Controller, 那么我們訪問的路徑就變成了

ip:port/test/second ip:port/test/third

并且這也是現(xiàn)在最常用的方式,相當于類上的注解里的url作為一個大的分類(一般代表一個模塊),方法是模塊中的各個功能。

同時還要注意,如果方法上面使用了@RequestMapping 注解來進行標記,那么其實并沒有限定這個方法用Http的哪種請求方式來進行訪問,所以我們可以用Get請求,也可以用post請求。當然除了這些還有一下不太常用的Delete,put,optio等請求方式。比如我們最上邊那個例子:

Get請求訪問:

Post請求訪問:

Delete請求訪問:

但是一般情況下,我們都會限定這個接口只能一某一種請求方式訪問,如何限制呢?

通過RequestMapping中的參數(shù)

@RestController
public class SecondController {
    @RequestMapping(value = "/second", method = RequestMethod.GET)
    public User second(){
        User u = new User("張勝男", 30,"女");
        return u;
    }
}

這時候就只能用Get請求來訪問了。

其他請求方式會報錯.

使用限定請求方式的注解

如果限定Get請求方式, 用@GetMapping 代替 @RequestMapping\

如果限定Post請求方式, 用@PostMapping 代替 @RequestMapping

比如限定Post請求方式:

@RestController
public class SecondController {
    @PostMapping("second")
    public User second(){
        User u = new User("張勝男", 30,"女");
        return u;
    }
}

我們可以看下 @PostMapping注解的實現(xiàn)方式,其實跟方式一是一樣的。

關于Controller中傳參

Get請求傳參

Get請求的參數(shù)傳遞都是通過在url后面拼接來進行傳參的, 比如我們傳一個name 和age 。url的寫法如下:

localhost:9090/third?name=zhangsan&age=20

在請求的路徑?后面表示參數(shù),多個參數(shù)之間用 & 進行連接。 那么在Controller中如何接收Get請求傳遞過來的參數(shù)呢。方式很多,我們就說兩種最常用的

直接在Controller方法的參數(shù)中,用相同的變量名稱接收參數(shù)。以上面的請求為例

@GetMapping("third")
public String third(String name, Integer age){
    System.out.println(name);
    System.out.println(age);
    return "success";
}

成功獲取參數(shù):

如果參數(shù)太多,用上面的方式來寫,會導致方法中的參數(shù)過多,看起來很亂。所以我們也可以使用一個javaBean來接收。前期就是javaBean中的屬性名要和參數(shù)名相同,同時要有get和set方法。

@GetMapping("getParam")
public User getParam(User user){
    System.out.println(user);
    // 將接收到的參數(shù)直接返回
    return user;
}

User類,再給一下:

package com.lsqingfeng.springboot.vo;
/**
 * @className: User
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-12 11:25
 */
public class User {
    private String name;
    private Integer age;
    private String gender;
    public User(String name, Integer age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", gender='" + gender + ''' +
                '}';
    }
}

訪問: http://localhost:9090/getParam?name=zhangsan&age=20

gender沒有傳值,所以是null, 參數(shù)接收成功:

Post請求傳參

Post請求傳參的方式,常用的有兩種,一中是通過form表單進行傳參(就是html中的form),還有一種是通過json的形式傳參。目前來說用json的比較多。

Form傳參

使用form傳參,我們的Controller再接收的時候和上面一樣可以直接接收上代碼。

@PostMapping("postForm")
public User postForm(String name, Integer age){
    User u = new User(name, age, null);
    return u;
}

post請求需要通過postman來模擬了,注意form傳參的位置,要在body的form-data里

如果參數(shù)過多,我們也是可以通過一個javaBean來進行接收的。

@PostMapping("postForm2")
public User postForm2(User user){
    return user;
}

Json傳參

通過json傳遞的參數(shù),content-type一般為: application/json

我們在接收參數(shù)的時候要通過一個新的注解 @RequestBody 來進行標識。

// 注意,User中一定要有無參構造方法
@PostMapping("postJson")
public User postJson(@RequestBody User user){
    return user;
}

通過json方式請求,看是否成功獲取。

關于@RequestParam注解

還有一種方式,這種方式不是很常用,但有的時候,跟三方接口對接的時候,不排除他們使用這種方式。

就是針對content-type是: application/x-www-form-urlcoded (Http協(xié)議中,如果不指定Content-Type,則默認傳遞的參數(shù)就是application/x-www-form-urlencoded類型)這是我在網(wǎng)上的資料中找到的,也驗證了,如下:

@PostMapping("postWWWForm")
public User postWWWForm(@RequestParam String name, @RequestParam Integer  age){
    return new User(name, age, null);
}

后來我把@RequestParam 注解去掉了,發(fā)現(xiàn)居然也可以接收到參數(shù)。其實這個注解就是用來接收普通參數(shù)的一個注解。正常情況下應該是可以省略的。什么時候不能省略呢,就是有時候這個參數(shù)是必填項,就是必須要傳,那么我們可以在這個注解中標識是否必傳和默認值。

@RequestParam(value="id",required =false,defaultValue ="10086") Integer id,

默認是true.

到此這篇關于SpringBoot中Controller的傳參方式詳細講解的文章就介紹到這了,更多相關SpringBoot controller傳參內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解java中命令行模式的實現(xiàn)

    詳解java中命令行模式的實現(xiàn)

    命令模式是一種行為設計模式,它允許您將請求封裝為對象,以便您可以將其參數(shù)化、隊列化、記錄和撤銷,本文主要為大家介紹一下java實現(xiàn)命令模式的示例代碼,需要的可以參考下
    2023-09-09
  • 解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題

    解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題

    這篇文章主要介紹了關于Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題解決,解決方法就是在waitfor()方法之前讀出窗口的標準輸出、輸出、錯誤緩沖區(qū)中的內容,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • java數(shù)組排列組合問題匯總

    java數(shù)組排列組合問題匯總

    這篇文章主要為大家詳細匯總了java數(shù)組排列組合問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • java整數(shù)與byte數(shù)組的轉換實現(xiàn)代碼

    java整數(shù)與byte數(shù)組的轉換實現(xiàn)代碼

    這篇文章主要介紹了java整數(shù)與byte數(shù)組的轉換實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-07-07
  • controller層如何同時接收兩個實體類

    controller層如何同時接收兩個實體類

    這篇文章主要介紹了controller層如何同時接收兩個實體類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java 如何將多種字符串格式 解析為Date格式

    java 如何將多種字符串格式 解析為Date格式

    這篇文章主要介紹了java 如何將多種字符串格式 解析為Date格式的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot根據(jù)實體類生成表的實現(xiàn)方法

    springboot根據(jù)實體類生成表的實現(xiàn)方法

    本文介紹了如何通過SpringBoot工程引入SpringDataJPA,并通過實體類自動生成數(shù)據(jù)庫表的過程,包括常見問題解決方法,感興趣的可以了解一下
    2024-09-09
  • java實現(xiàn)解析json復雜數(shù)據(jù)的方法詳解

    java實現(xiàn)解析json復雜數(shù)據(jù)的方法詳解

    這篇文章主要為大家詳細介紹了java如何實現(xiàn)解析json復雜數(shù)據(jù),文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以學習一下
    2024-01-01
  • springboot構建docker鏡像并推送到阿里云

    springboot構建docker鏡像并推送到阿里云

    本文主要介紹了springboot構建docker鏡像并推送到阿里云,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Springboot項目使用攔截器方法詳解

    Springboot項目使用攔截器方法詳解

    這篇文章主要介紹了Springboot項目使用攔截器方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論

大厂| 凤阳县| 平和县| 建昌县| 晋江市| 林州市| 临安市| 河池市| 德庆县| 囊谦县| 西平县| 盐津县| 望城县| 大同县| 安远县| 桐城市| 当雄县| 镇原县| 抚远县| 望江县| 乐亭县| 龙井市| 中西区| 二连浩特市| 南木林县| 永福县| 同德县| 勃利县| 奇台县| 崇信县| 中卫市| 双流县| 浙江省| SHOW| 靖西县| 吴江市| 北碚区| 子长县| 葫芦岛市| 巩留县| 饶河县|