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

Springboot 接收POST、json、文本數(shù)據(jù)的方法 附示例

 更新時(shí)間:2023年10月12日 11:36:30   作者:梅塢茶坊  
這篇文章主要介紹了Springboot 接收POST、json、文本數(shù)據(jù)實(shí)踐,如果把 json 作為參數(shù)傳遞,我們可以使用 @requestbody 接收參數(shù),將數(shù)據(jù)直接轉(zhuǎn)換成對(duì)象,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、接收 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ù)沒(méi)有傳遞的情況

(1)如果沒(méi)有傳遞參數(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 來(lái)接收參數(shù)

(1)Controller 還可以直接使用 map 來(lái)接收所有的請(qǐng)求參數(shù):

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("/postHello3")
    public String postHello3(@RequestParam Map<String,Object> params) {
        return "name:" + params.get("name") + "\nage:" + params.get("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ì)象來(lái)接收參數(shù)

1)如果一個(gè) post 請(qǐng)求的參數(shù)太多,我們構(gòu)造一個(gè)對(duì)象來(lái)簡(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ù)通過(guò) 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;
    }

(3)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

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

(5)如果一個(gè) post 請(qǐng)求的參數(shù)分屬不同的對(duì)象,也可以使用多個(gè)對(duì)象來(lái)接收參數(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ù)無(wú)法正常傳遞:

(2)我們可以結(jié)合 @InitBinder 解決這個(gè)問(wèn)題,通過(guò)參數(shù)預(yù)處理來(lái)指定使用的前綴為 u. 

 除了在 Controller 里單獨(dú)定義預(yù)處理方法外,我們還可以通過(guò) @ControllerAdvice 結(jié)合 @InitBinder 來(lái)定義全局的參數(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)如果傳遞過(guò)來(lái)的是 Text 文本,我們可以通過(guò) 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();

三、接收 JSON 數(shù)據(jù)

1,使用 Map 來(lái)接收數(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;
import java.util.Map;
@RestController
public class HelloController {
    @PostMapping("/helloMap")
    public String helloMap(@RequestBody Map params) {
        return "name:" + params.get("name") + "\n age:" + params.get("age");
    }
}

(2)下面是一個(gè)簡(jiǎn)單的測(cè)試樣例:

2,使用 Bean 對(duì)象來(lái)接收數(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)文章

  • mybatis-plus 實(shí)現(xiàn)分頁(yè)查詢的示例代碼

    mybatis-plus 實(shí)現(xiàn)分頁(yè)查詢的示例代碼

    本文介紹了在MyBatis-Plus中實(shí)現(xiàn)分頁(yè)查詢,包括引入依賴、配置分頁(yè)插件、使用分頁(yè)查詢以及在控制器中調(diào)用分頁(yè)查詢的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試

    使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試

    這篇文章主要介紹了使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán)

    Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán)

    這篇文章主要為大家詳細(xì)介紹了Java使用單鏈表實(shí)現(xiàn)約瑟夫環(huán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Ubuntu安裝jenkins完成自動(dòng)化構(gòu)建詳細(xì)步驟

    Ubuntu安裝jenkins完成自動(dòng)化構(gòu)建詳細(xì)步驟

    Jenkins是一個(gè)開(kāi)源的自動(dòng)化服務(wù)器,可以用來(lái)輕松地建立持續(xù)集成和持續(xù)交付(CI/CD)管道,這篇文章主要給大家介紹了關(guān)于Ubuntu安裝jenkins完成自動(dòng)化構(gòu)建的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn)

    詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn)

    這篇文章主要介紹了Java創(chuàng)建多線程的四種方式以及優(yōu)缺點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot中操作Redis及工具類的封裝詳解

    SpringBoot中操作Redis及工具類的封裝詳解

    在我們項(xiàng)目開(kāi)發(fā)中總是免不了會(huì)使用緩存,Redis現(xiàn)在基本是我們公司中非常常見(jiàn)的緩存方案,包括在用戶token的緩存,熱點(diǎn)信息的緩存等,這篇文章主要講講在SpringBoot項(xiàng)目中如何去操作Redis,及最后工具類的封裝
    2023-05-05
  • java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法示例

    java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法示例

    這篇文章主要介紹了java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法,結(jié)合實(shí)例形式分析了java正則判定、字符串遍歷及統(tǒng)計(jì)相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • Java OpenCV實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解

    Java OpenCV實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解

    這篇文章主要介紹了Java OpenCV實(shí)現(xiàn)人臉識(shí)別過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java實(shí)現(xiàn)角色扮演游戲的示例代碼

    Java實(shí)現(xiàn)角色扮演游戲的示例代碼

    這篇文章主要介紹了通過(guò)Java語(yǔ)言實(shí)現(xiàn)的自制的角色扮演游戲,選擇兩個(gè)角色,然后進(jìn)行PK,可用來(lái)學(xué)習(xí)JAVA的接口,繼承和多態(tài)。需要的可以參考一下
    2022-02-02
  • 詳解java中String、StringBuilder、StringBuffer的區(qū)別

    詳解java中String、StringBuilder、StringBuffer的區(qū)別

    這篇文章主要介紹了java中String、StringBuilder、StringBuffer的區(qū)別,文中講解的很清晰,有對(duì)于這方面不太懂的同學(xué)可以研究下
    2021-02-02

最新評(píng)論