欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中Controller的傳參方式詳細(xì)講解

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

前言

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

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

上一次我們介紹了 @RestController 注解,這個(gè)注解會(huì)把所有的返回結(jié)果以json(json其實(shí)不太準(zhǔn)確,應(yīng)該是可序列化對(duì)象,大部分是json形式)的形式進(jìn)行返回。我們今天來(lái)舉個(gè)例子。

關(guān)于@RestController注解

Controller代碼:

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

這里返回了一個(gè)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;
    }
}

訪問(wèn):http://localhost:9090/second 得到結(jié)果:

看到了返回的就是json類型的數(shù)據(jù)。這就是 @RestController的作用。如果不用@RestController,我們?cè)诜椒ㄉ霞由螥ResponseBody是同樣的效果。 @RestController注解就是@Controller和@ResponseBody 的組合。

關(guān)于@RequestMapping注解

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

@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, 那么我們?cè)L問(wèn)的路徑就變成了

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

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

同時(shí)還要注意,如果方法上面使用了@RequestMapping 注解來(lái)進(jìn)行標(biāo)記,那么其實(shí)并沒(méi)有限定這個(gè)方法用Http的哪種請(qǐng)求方式來(lái)進(jìn)行訪問(wèn),所以我們可以用Get請(qǐng)求,也可以用post請(qǐng)求。當(dāng)然除了這些還有一下不太常用的Delete,put,optio等請(qǐng)求方式。比如我們最上邊那個(gè)例子:

Get請(qǐng)求訪問(wèn):

Post請(qǐng)求訪問(wèn):

Delete請(qǐng)求訪問(wèn):

但是一般情況下,我們都會(huì)限定這個(gè)接口只能一某一種請(qǐng)求方式訪問(wèn),如何限制呢?

通過(guò)RequestMapping中的參數(shù)

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

這時(shí)候就只能用Get請(qǐng)求來(lái)訪問(wèn)了。

其他請(qǐng)求方式會(huì)報(bào)錯(cuò).

使用限定請(qǐng)求方式的注解

如果限定Get請(qǐng)求方式, 用@GetMapping 代替 @RequestMapping\

如果限定Post請(qǐng)求方式, 用@PostMapping 代替 @RequestMapping

比如限定Post請(qǐng)求方式:

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

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

關(guān)于Controller中傳參

Get請(qǐng)求傳參

Get請(qǐng)求的參數(shù)傳遞都是通過(guò)在url后面拼接來(lái)進(jìn)行傳參的, 比如我們傳一個(gè)name 和age 。url的寫法如下:

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

在請(qǐng)求的路徑?后面表示參數(shù),多個(gè)參數(shù)之間用 & 進(jìn)行連接。 那么在Controller中如何接收Get請(qǐng)求傳遞過(guò)來(lái)的參數(shù)呢。方式很多,我們就說(shuō)兩種最常用的

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

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

成功獲取參數(shù):

如果參數(shù)太多,用上面的方式來(lái)寫,會(huì)導(dǎo)致方法中的參數(shù)過(guò)多,看起來(lái)很亂。所以我們也可以使用一個(gè)javaBean來(lái)接收。前期就是javaBean中的屬性名要和參數(shù)名相同,同時(shí)要有g(shù)et和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 + ''' +
                '}';
    }
}

訪問(wèn): http://localhost:9090/getParam?name=zhangsan&age=20

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

Post請(qǐng)求傳參

Post請(qǐng)求傳參的方式,常用的有兩種,一中是通過(guò)form表單進(jìn)行傳參(就是html中的form),還有一種是通過(guò)json的形式傳參。目前來(lái)說(shuō)用json的比較多。

Form傳參

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

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

post請(qǐng)求需要通過(guò)postman來(lái)模擬了,注意form傳參的位置,要在body的form-data里

如果參數(shù)過(guò)多,我們也是可以通過(guò)一個(gè)javaBean來(lái)進(jìn)行接收的。

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

Json傳參

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

我們?cè)诮邮諈?shù)的時(shí)候要通過(guò)一個(gè)新的注解 @RequestBody 來(lái)進(jìn)行標(biāo)識(shí)。

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

通過(guò)json方式請(qǐng)求,看是否成功獲取。

關(guān)于@RequestParam注解

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

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

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

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

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

默認(rèn)是true.

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

相關(guān)文章

  • springboot+mysql+mybatis實(shí)現(xiàn)控制臺(tái)打印sql

    springboot+mysql+mybatis實(shí)現(xiàn)控制臺(tái)打印sql

    在Spring Boot中使用MyBatis與MySQL,并希望在控制臺(tái)打印SQL語(yǔ)句,可以通過(guò)配置MyBatis的日志級(jí)別來(lái)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Java 實(shí)現(xiàn)跨平臺(tái)的操作方式

    Java 實(shí)現(xiàn)跨平臺(tái)的操作方式

    這篇文章主要介紹了Java 實(shí)現(xiàn)跨平臺(tái)的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Redis高并發(fā)場(chǎng)景防止庫(kù)存數(shù)量超賣少賣

    Redis高并發(fā)場(chǎng)景防止庫(kù)存數(shù)量超賣少賣

    商品超賣是銷售數(shù)量超過(guò)實(shí)際庫(kù)存的情況,常因庫(kù)存管理不當(dāng)引發(fā),傳統(tǒng)庫(kù)存管理在高并發(fā)環(huán)境下易出錯(cuò),可通過(guò)線程加鎖或使用Redis同步庫(kù)存狀態(tài)解決,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-09-09
  • Java正則表達(dá)式判斷是否包含數(shù)字、字母、特殊字符及中文的多種方法

    Java正則表達(dá)式判斷是否包含數(shù)字、字母、特殊字符及中文的多種方法

    這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式判斷是否包含數(shù)字、字母、特殊字符及中文的多種方法,Java正則表達(dá)式在字符串處理和模式匹配中扮演著重要角色,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 如何解決異步任務(wù)上下文丟失問(wèn)題

    如何解決異步任務(wù)上下文丟失問(wèn)題

    在多線程編程中,異步任務(wù)可能會(huì)導(dǎo)致上下文信息丟失,為了解決這個(gè)問(wèn)題,可以在執(zhí)行異步任務(wù)前,通過(guò)自定義TaskDecorator拷貝主線程的上下文至子線程,這樣可以確保上下文在異步執(zhí)行過(guò)程中得以保留,將定制的TaskDecorator設(shè)置至線程池,可以有效地解決上下文丟失問(wèn)題
    2024-09-09
  • Java中跳出多重循環(huán)嵌套的三種方法

    Java中跳出多重循環(huán)嵌套的三種方法

    這篇文章主要給大家介紹了關(guān)于Java中跳出多重循環(huán)嵌套的三種方法,很多復(fù)雜的運(yùn)算以及邏輯可能用到嵌套循環(huán),但是如何跳出當(dāng)前的多重嵌套循環(huán),很多同學(xué)特別是新手都操作的不是很清楚,需要的朋友可以參考下
    2023-07-07
  • java中如何使用HttpClient調(diào)用接口

    java中如何使用HttpClient調(diào)用接口

    這篇文章主要介紹了java中如何使用HttpClient調(diào)用接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java中的List接口實(shí)現(xiàn)類解析

    Java中的List接口實(shí)現(xiàn)類解析

    這篇文章主要介紹了Java中的List接口實(shí)現(xiàn)類解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java使用Swagger接口框架方法詳解

    Java使用Swagger接口框架方法詳解

    這篇文章主要介紹了Java使用Swagger接口框架方法,Swagger是一個(gè)方便我們更好的編寫API文檔的框架,而且Swagger可以模擬http請(qǐng)求調(diào)用,感興趣的同學(xué)可以參考下文
    2023-05-05
  • 詳解Java數(shù)組的排序算法與二分查找法

    詳解Java數(shù)組的排序算法與二分查找法

    這篇文章詳細(xì)給大家介紹了Java數(shù)組的排序算法與二分查找法,文中有詳細(xì)的代碼示例,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05

最新評(píng)論