SpringBoot中Controller的傳參方式詳細講解
前言
SpringBoot整合SpringMvc其實千面一直講的都是。只需要我們在pom文件中引入 web的starter就可以了,然后我們就可以正常使用springMvc中的功能了。所以本篇文章可能更多的是回顧,回顧一下springMVC中的一些常用的功能。
按照正常的流程,我們應(yīng)該先講一講怎么配置視圖解析器,但是已經(jīng)提到了,現(xiàn)在都是前后端分離的項目,后端無需配置頁面跳轉(zhuǎn),只需要返回數(shù)據(jù)即可,所以這一部分也沒必要再講了。那咱么就介紹下Controller中的常用寫法。
上一次我們介紹了 @RestController 注解,這個注解會把所有的返回結(jié)果以json(json其實不太準(zhǔn)確,應(yīng)該是可序列化對象,大部分是json形式)的形式進行返回。我們今天來舉個例子。
關(guān)于@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 得到結(jié)果:

看到了返回的就是json類型的數(shù)據(jù)。這就是 @RestController的作用。如果不用@RestController,我們在方法上加上@ResponseBody是同樣的效果。 @RestController注解就是@Controller和@ResponseBody 的組合。
關(guān)于@RequestMapping注解
@RequestMapping注解主要用于標(biāo)識該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)在最常用的方式,相當(dāng)于類上的注解里的url作為一個大的分類(一般代表一個模塊),方法是模塊中的各個功能。
同時還要注意,如果方法上面使用了@RequestMapping 注解來進行標(biāo)記,那么其實并沒有限定這個方法用Http的哪種請求方式來進行訪問,所以我們可以用Get請求,也可以用post請求。當(dāng)然除了這些還有一下不太常用的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)方式,其實跟方式一是一樣的。

關(guā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ù)太多,用上面的方式來寫,會導(dǎo)致方法中的參數(shù)過多,看起來很亂。所以我們也可以使用一個javaBean來接收。前期就是javaBean中的屬性名要和參數(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 + ''' +
'}';
}
}訪問: 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 來進行標(biāo)識。
// 注意,User中一定要有無參構(gòu)造方法
@PostMapping("postJson")
public User postJson(@RequestBody User user){
return user;
}通過json方式請求,看是否成功獲取。

關(guān)于@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ù)的一個注解。正常情況下應(yīng)該是可以省略的。什么時候不能省略呢,就是有時候這個參數(shù)是必填項,就是必須要傳,那么我們可以在這個注解中標(biāo)識是否必傳和默認值。
@RequestParam(value="id",required =false,defaultValue ="10086") Integer id,
默認是true.
到此這篇關(guān)于SpringBoot中Controller的傳參方式詳細講解的文章就介紹到這了,更多相關(guān)SpringBoot controller傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題
這篇文章主要介紹了關(guān)于Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題解決,解決方法就是在waitfor()方法之前讀出窗口的標(biāo)準(zhǔn)輸出、輸出、錯誤緩沖區(qū)中的內(nèi)容,本文給大家介紹的非常詳細,需要的朋友可以參考下2022-07-07
java整數(shù)與byte數(shù)組的轉(zhuǎn)換實現(xiàn)代碼
這篇文章主要介紹了java整數(shù)與byte數(shù)組的轉(zhuǎn)換實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-07-07
springboot根據(jù)實體類生成表的實現(xiàn)方法
本文介紹了如何通過SpringBoot工程引入SpringDataJPA,并通過實體類自動生成數(shù)據(jù)庫表的過程,包括常見問題解決方法,感興趣的可以了解一下2024-09-09
java實現(xiàn)解析json復(fù)雜數(shù)據(jù)的方法詳解
這篇文章主要為大家詳細介紹了java如何實現(xiàn)解析json復(fù)雜數(shù)據(jù),文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以學(xué)習(xí)一下2024-01-01
springboot構(gòu)建docker鏡像并推送到阿里云
本文主要介紹了springboot構(gòu)建docker鏡像并推送到阿里云,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05

