Springboot接收?Form?表單數(shù)據(jù)的示例詳解
一、接收 Form 表單數(shù)據(jù)
1,基本的接收方法
(1)下面樣例Controller接收form-data格式的POST數(shù)據(jù):
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/postHello1")
public String postHello1(@RequestParam("name") String name,
@RequestParam("age") Integer age) {
return "name:" + name + "\nage:" + age;
}
}(2)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

2,參數(shù)沒有傳遞的情況
(1)如果沒有傳遞參數(shù)Controller將會(huì)報(bào)錯(cuò),這個(gè)同樣有如下兩種解決辦法:
- 使用required = false標(biāo)注參數(shù)是非必須的。
- 使用defaultValue給參數(shù)指定個(gè)默認(rèn)值。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/postHello2")
public String postHello2(@RequestParam(name = "name", defaultValue = "xxx") String name,
@RequestParam(name = "age", required = false) Integer age) {
return "name:" + name + "\nage:" + age;
}
}
3,使用 map 來接收參數(shù)
(1)Controller還可以直接使用map來接收所有的請(qǐng)求參數(shù):
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/postHello2")
public String postHello2(@RequestParam(name = "name", defaultValue = "xxx") String name,
@RequestParam(name = "age", required = false) Integer age) {
return "name:" + name + "\nage:" + age;
}
}(2)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

4,接收一個(gè)數(shù)組
(1)表單中有多個(gè)同名參數(shù),Controller這邊可以定義一個(gè)數(shù)據(jù)進(jìn)行接收:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class HelloController {
@PostMapping("/postHello4")
public String postHello4(@RequestParam("name") String[] names) {
String result = "";
for(String name:names){
result += name + "\n";
}
return result;
}
}(2)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

5,使用對(duì)象來接收參數(shù)
1)如果一個(gè)post請(qǐng)求的參數(shù)太多,我們構(gòu)造一個(gè)對(duì)象來簡(jiǎn)化參數(shù)的接收方式:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/postHello5")
public String postHello5(User user) {
return "name:" + user.getName() + "\nage:" + user.getAge();
}
}(2)User類的定義如下,到時(shí)可以直接將多個(gè)參數(shù)通過getter、setter方法注入到對(duì)象中去:
public class User {
private String name;
private Integer age;
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;
}
}(3)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

(4)如果傳遞的參數(shù)有前綴,且前綴與接收實(shí)體類的名稱相同,那么參數(shù)也是可以正常傳遞的:

(5)如果一個(gè) post 請(qǐng)求的參數(shù)分屬不同的對(duì)象,也可以使用多個(gè)對(duì)象來接收參數(shù):
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/postHello5-1")
public String hello(User user, Phone phone) {
return "name:" + user.getName() + "\nage:" + user.getAge()
+ "\nnumber:" + phone.getNumber();
}
}
6,使用對(duì)象接收時(shí)指定參數(shù)前綴
(1)如果傳遞的參數(shù)有前綴,且前綴與接收實(shí)體類的名稱不同相,那么參數(shù)無法正常傳遞:

(2)我們可以結(jié)合@InitBinder解決這個(gè)問題,通過參數(shù)預(yù)處理來指定使用的前綴為 u.
除了在 Controller 里單獨(dú)定義預(yù)處理方法外,我們還可以通過@ControllerAdvice結(jié)合@InitBinder來定義全局的參數(shù)預(yù)處理方法,方便各個(gè)Controller使用。具體做法參考我之前的文章:
SpringBoot - @ControllerAdvice的使用詳解3(請(qǐng)求參數(shù)預(yù)處理 @InitBinder)
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
@RestController
public class HelloController {
@PostMapping("/postHello6")
public String postHello6(@ModelAttribute("u") User user) {
return "name:" + user.getName() + "\nage:" + user.getAge();
}
@InitBinder("u")
private void initBinder(WebDataBinder binder) {
binder.setFieldDefaultPrefix("u.");
}
}(3)重啟程序再次發(fā)送請(qǐng)求,可以看到參數(shù)已經(jīng)成功接收了:

二、接收字符串文本數(shù)據(jù)
(1)如果傳遞過來的是Text文本,我們可以通過HttpServletRequest獲取輸入流從而讀取文本內(nèi)容。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@RestController
public class HelloController {
@PostMapping("/helloText")
public String hello(HttpServletRequest request) {
ServletInputStream is = null;
try {
is = request.getInputStream();
StringBuilder sb = new StringBuilder();
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
sb.append(new String(buf, 0, len));
}
System.out.println(sb.toString());
return "獲取到的文本內(nèi)容為:" + sb.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
三、接收 JSON 數(shù)據(jù)
1,使用 Map 來接收數(shù)據(jù)
(1)如果把json作為參數(shù)傳遞,我們可以使用@requestbody接收參數(shù),將數(shù)據(jù)轉(zhuǎn)換Map:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/helloBean")
public String hello(@RequestBody User user){
return user.getName() + " " + user.getAge();
}
}(2)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

2,使用 Bean 對(duì)象來接收數(shù)據(jù)
(1)如果把json作為參數(shù)傳遞,我們可以使用@requestbody接收參數(shù),將數(shù)據(jù)直接轉(zhuǎn)換成對(duì)象:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@PostMapping("/helloBean")
public String hello(@RequestBody User user){
return user.getName() + " " + user.getAge();
}
}(2)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

(4)如果傳遞的JOSN數(shù)據(jù)是一個(gè)數(shù)組也是可以的,Controller做如下修改:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class HelloController {
@PostMapping("/helloList")
public String helloList(@RequestBody List<User> users){
String result = "";
for(User user:users){
result += user.getName() + " " + user.getAge() + "\n";
}
return result;
}
}
到此這篇關(guān)于Springboot接收 Form 表單數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Springboot接收表單數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 用SpringBoot框架來接收multipart/form-data文件方式
- springboot2中使用@JsonFormat注解不生效的解決
- spring boot項(xiàng)目使用@JsonFormat失效問題的解決
- springboot如何接收application/x-www-form-urlencoded類型的請(qǐng)求
- spring中@Transactional?注解失效的原因及解決辦法
- Spring的編程式事務(wù)TransactionTemplate的用法詳解
- Spring?Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解
- Spring模塊詳解之Spring ORM和Spring Transaction詳解
相關(guān)文章
Java正則表達(dá)式之split()方法實(shí)例詳解
這篇文章主要介紹了Java正則表達(dá)式之split()方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了split方法的功能、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-03-03
Java利用trueLicense實(shí)現(xiàn)項(xiàng)目離線證書授權(quán)操作步驟
文章介紹了如何使用trueLicense實(shí)現(xiàn)離線授權(quán)控制,包括生成公私鑰、創(chuàng)建證書校驗(yàn)?zāi)K、生成證書模塊和測(cè)試模塊,通過這種方式,可以控制用戶使用的項(xiàng)目模塊、授權(quán)周期、使用的設(shè)備和服務(wù)器,感興趣的朋友跟隨小編一起看看吧2024-11-11
java程序員自己的圖片轉(zhuǎn)文字OCR識(shí)圖工具分享
這篇文章主要介紹了java程序員自己的圖片轉(zhuǎn)文字OCR識(shí)圖工具,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
struts2如何使用攔截器進(jìn)行用戶權(quán)限控制實(shí)例
本篇文章主要介紹了struts2如何使用攔截器進(jìn)行用戶權(quán)限控制實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
Spring事務(wù)處理Transactional,鎖同步和并發(fā)線程
本文詳細(xì)講解了Spring事務(wù)處理Transactional,鎖同步和并發(fā)線程。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
java 中Object與Objects的區(qū)別在哪里
這篇文章主要介紹了java 中Object與Objects的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
SpringMVC 實(shí)現(xiàn)用戶登錄實(shí)例代碼
這篇文章主要介紹了SpringMVC 實(shí)現(xiàn)用戶登錄實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法
這篇文章主要介紹了Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06

