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

SpringBoot請(qǐng)求與響應(yīng)實(shí)例全解析

 更新時(shí)間:2026年04月29日 09:44:06   作者:PowerCodejt  
文章主要介紹了SpringBoot中請(qǐng)求與響應(yīng)的處理方式,包括簡(jiǎn)單參數(shù)、實(shí)體參數(shù)、數(shù)組集合參數(shù)、日期參數(shù)、JSON參數(shù)和路徑參數(shù)的處理,同時(shí),還介紹了響應(yīng)的處理,包括@ResponseBody注解和統(tǒng)一響應(yīng)結(jié)果類(lèi)的設(shè)計(jì)

Spring Boot請(qǐng)求與響應(yīng)

一、請(qǐng)求

1.簡(jiǎn)單參數(shù)

1.1請(qǐng)求參數(shù)名稱(chēng)與方法形參名稱(chēng)一致

@RestController
public class RequestController {
     @RequestMapping("/easyParam")
    public String simpleParam(String name ,Integer age){
        //獲取請(qǐng)求參數(shù)
        return name+":::"+age;
    }
}

postman測(cè)試( GET 請(qǐng)求)

postman測(cè)試( POST請(qǐng)求 )

結(jié)論:不論是GET請(qǐng)求還是POST請(qǐng)求,對(duì)于簡(jiǎn)單參數(shù)來(lái)講,只要保證請(qǐng)求參數(shù)名和Controller方法中的形參名保持一致,就可以獲取到請(qǐng)求參數(shù)中的數(shù)據(jù)值。

1.2請(qǐng)求參數(shù)名稱(chēng)與方法形參名稱(chēng)一致

@RequestMapping("/simpleParam")
public String simpleParam(String username , Integer age ){//請(qǐng)求參數(shù)名和形參名不相同
 ?  return username+"  :  "+age;
}

結(jié)論:對(duì)于簡(jiǎn)單參數(shù)來(lái)講,請(qǐng)求參數(shù)名和controller方法中的形參名不一致時(shí),無(wú)法接收到請(qǐng)求數(shù)據(jù)。

解決方案:可以使用Spring提供的@RequestParam注解完成映射

 ?  public String simpleParam(@RequestParam("name") String username , Integer age ){//請(qǐng)求參數(shù)名和形參名不相同
 ?  return username+"  :  "+age;
}

如果該參數(shù)是可選的,可以將required屬性設(shè)置為false

@RequestMapping("/easyParam")
 ?  public String simpleParam(@RequestParam(value = "name",required = false) String username , Integer age ){//請(qǐng)求參數(shù)名和形參名不相同
 ? ? ?  return username+"  :  "+age;
 ?  }

2.實(shí)體參數(shù)

請(qǐng)求參數(shù)封裝到一個(gè)實(shí)體類(lèi)對(duì)象中。 請(qǐng)求參數(shù)名與實(shí)體類(lèi)的屬性名相同

2.1 簡(jiǎn)單實(shí)體對(duì)象

定義POJO實(shí)體類(lèi):

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
 ?  private String name;
 ?  private Integer age; ? ? ?
}

Controller方法:

@RequestMapping("/easyPojo")
 ?  public String simplePojo(Student student){
 ? ? ?  return "name = "+student.getName()+", age = "+student.getAge()+";
 ?  }

[說(shuō)明]參數(shù)名和實(shí)體類(lèi)屬性名一致時(shí),參數(shù)值才會(huì)傳遞,參數(shù)名和實(shí)體類(lèi)屬性名不一致時(shí),不傳遞值2.2 復(fù)雜實(shí)體對(duì)象

復(fù)雜實(shí)體對(duì)象指的是,在實(shí)體類(lèi)中有一個(gè)或多個(gè)屬性,也是實(shí)體對(duì)象類(lèi)型的。如下:

Student類(lèi)中有一個(gè)Address類(lèi)型的屬性(Address是一個(gè)實(shí)體類(lèi))

復(fù)雜實(shí)體對(duì)象的封裝,需要遵守如下規(guī)則:

請(qǐng)求參數(shù)名與形參對(duì)象屬性名相同,按照對(duì)象層次結(jié)構(gòu)關(guān)系即可接收嵌套實(shí)體類(lèi)屬性參數(shù)。

定義POJO實(shí)體類(lèi):

Address實(shí)體類(lèi)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
 ?  private String province;
 ?  private String city;
}

Student實(shí)體類(lèi)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private String name;
private Integer age;
private Address address;
}

Controller方法:

@RestController
public class RequestController {
    //實(shí)體參數(shù):復(fù)雜實(shí)體對(duì)象
    @RequestMapping("/complexPojo")
    public String complexPojo(Student student){
        return "name = "+student.getName()+
                ", age = "+student.getAge()+
                ", job = "+student.getJob()+
        ", address.city = "+student.getAddress().getCity()+
        ", address.province = "+student.getAddress().getProvince();
    }
}

Postman測(cè)試:

3.數(shù)組集合參數(shù)

數(shù)組集合參數(shù)的使用場(chǎng)景:在HTML的表單中,有一個(gè)表單項(xiàng)是支持多選的(復(fù)選框),可以提交選擇的多個(gè)值。

后端程序接收上述多個(gè)值的方式有兩種:數(shù)組、集合 3.1 數(shù)組

數(shù)組參數(shù):請(qǐng)求參數(shù)名與形參數(shù)組名稱(chēng)相同且請(qǐng)求參數(shù)為多個(gè),定義數(shù)組類(lèi)型形參即可接收參數(shù)

Controller方法:

    //數(shù)組集合參數(shù)
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] course){
        System.out.println(Arrays.toString(course));
        return "課程: "+Arrays.toString(course);
    }

Postman測(cè)試:

3.2 集合

默認(rèn)情況下,請(qǐng)求中參數(shù)名相同的多個(gè)值,是封裝到數(shù)組。如果要封裝到集合,要使用@RequestParam綁定參數(shù)關(guān)系

Controller方法:

 //數(shù)組集合參數(shù)
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> course){
        return "課程: "+course;
    }

Postman測(cè)試:

  • 3日期參數(shù)

日期類(lèi)型的參數(shù)在進(jìn)行封裝的時(shí)候,需要通過(guò)@DateTimeFormat注解,以及其pattern屬性來(lái)設(shè)置日期的格式。

使用@DateTimeFormat注解設(shè)置日期類(lèi)型數(shù)據(jù)格式,默認(rèn)格式y(tǒng)yyy/MM/dd。

@DateTimeFormat注解的pattern屬性中指定了哪種日期格式,前端的日期參數(shù)就必須按照指定的格式傳遞。 后端controller方法中,需要使用Date類(lèi)型或LocalDateTime類(lèi)型,來(lái)封裝傳遞的參數(shù)。

Controller方法:

//日期時(shí)間參數(shù)
    @RequestMapping("/dataParam")
    public String dataParam(Date date,
                            @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
                            @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
        System.out.println("參數(shù)傳遞 date ==> "+date);
        System.out.println("參數(shù)傳遞 date1(yyyy-MM-dd) ==> "+date1);
        System.out.println("參數(shù)傳遞 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
        return "{'module':'data param'}";
    }

Postman測(cè)試:

3.4 JSON參數(shù) 前后端分離后,前端向后臺(tái)會(huì)傳遞JSON格式數(shù)據(jù),進(jìn)行交互。 Postman發(fā)送JSON格式數(shù)據(jù):

服務(wù)端Controller方法接收J(rèn)SON格式數(shù)據(jù):

傳遞json格式的參數(shù),在Controller中會(huì)使用實(shí)體類(lèi)進(jìn)行封裝。 封裝規(guī)則:JSON數(shù)據(jù)鍵名與形參對(duì)象屬性名相同,定義POJO類(lèi)型形參即可接收參數(shù)。需要使用 @RequestBody標(biāo)識(shí)。 @RequestBody注解:將JSON數(shù)據(jù)映射到形參的實(shí)體類(lèi)對(duì)象中(JSON中的key和實(shí)體類(lèi)中的屬性名保持一致) Controller方法:

//5. json參數(shù)
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody Student student){
        return "name = "+student.getName()+
                ", age = "+student.getAge()+               
                ", address.city = "+student.getAddress().getCity()+
                ", address.province = "+student.getAddress().getProvince();
    }

Postman測(cè)試:

3.5路徑參數(shù) 傳統(tǒng)的開(kāi)發(fā)中請(qǐng)求參數(shù)是放在請(qǐng)求體(POST請(qǐng)求)傳遞或跟在URL后面通過(guò)?key=value的形式傳遞(GET請(qǐng)求)。

在現(xiàn)在的開(kāi)發(fā)中,經(jīng)常還會(huì)直接在請(qǐng)求的URL中傳遞參數(shù)。例如:

http://localhost:8080/path/1  
http://localhost:880/path/1/0

路徑參數(shù):

前端:通過(guò)請(qǐng)求URL直接傳遞參數(shù) 后端:使用{…}來(lái)標(biāo)識(shí)該路徑參數(shù),需要使用@PathVariable獲取路徑參數(shù)

Controller方法:

//路徑參數(shù)
    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        return "id = "+id;
    }

Postman測(cè)試:

傳遞多個(gè)路徑參數(shù):

Controller方法:

二、響應(yīng)

2.1 @ResponseBody 前面所編寫(xiě)的controller方法中,都已經(jīng)設(shè)置了響應(yīng)數(shù)據(jù)。

思考:controller方法中的return的結(jié)果,怎么就可以響應(yīng)給瀏覽器呢?

答案:使用@ResponseBody注解

@ResponseBody注解:

類(lèi)型:方法注解、類(lèi)注解 位置:書(shū)寫(xiě)在Controller方法上或類(lèi)上 作用:將方法返回值直接響應(yīng)給瀏覽器 如果返回值類(lèi)型是實(shí)體對(duì)象/集合,將會(huì)轉(zhuǎn)換為JSON格式后在響應(yīng)給瀏覽器 但是在Controller中,只在類(lèi)上添加了@RestController注解、方法添加了@RequestMapping注解,并沒(méi)有使用@ResponseBody注解,怎么給瀏覽器響應(yīng)呢?

原因是在類(lèi)上添加的@RestController注解,是一個(gè)組合注解。

@RestController = @Controller + @ResponseBody 在類(lèi)上添加@RestController就相當(dāng)于添加了@ResponseBody注解。

類(lèi)上有@RestController注解或@ResponseBody注解時(shí):表示當(dāng)前類(lèi)下所有的方法返回值做為響應(yīng)數(shù)據(jù) 方法的返回值,如果是一個(gè)POJO對(duì)象或集合時(shí),會(huì)先轉(zhuǎn)換為JSON格式,在響應(yīng)給瀏覽器。 下面測(cè)試響應(yīng)數(shù)據(jù):

@RestController
public class ResponseController {
@RequestMapping("/study")
public String study(){
    return "根據(jù)SpringBoot開(kāi)發(fā)實(shí)戰(zhàn)學(xué)習(xí)SpringBoot";
}
//響應(yīng)實(shí)體對(duì)象
@RequestMapping("/getAddr")
public Address getAddr(){
    Address addr = new Address();//創(chuàng)建實(shí)體類(lèi)對(duì)象
    addr.setProvince("湖南");
    addr.setCity("衡陽(yáng)");
    return addr;
}
//響應(yīng)集合數(shù)據(jù)
@RequestMapping("/listAddr")
public List<Address> listAddr(){
    List<Address> list = new ArrayList<>();//集合對(duì)象
    Address addr = new Address();
    addr.setProvince("湖南");
    addr.setCity("衡陽(yáng)");
    Address addr2 = new Address();
    addr2.setProvince("湖南");
    addr2.setCity("長(zhǎng)沙");
    list.add(addr);
    list.add(addr2);
    return list;
}
}

postman測(cè)試:

2.2 統(tǒng)一響應(yīng)結(jié)果 開(kāi)發(fā)項(xiàng)目中,controller方法會(huì)定義一個(gè)統(tǒng)一的返回結(jié)果。方案如下:

統(tǒng)一的返回結(jié)果使用類(lèi)來(lái)描述,包含:

響應(yīng)狀態(tài)碼:當(dāng)前請(qǐng)求是成功,還是失敗 狀態(tài)碼信息:給頁(yè)面的提示信息 返回的數(shù)據(jù):給前端響應(yīng)的數(shù)據(jù)(字符串、對(duì)象、集合) 定義在一個(gè)實(shí)體類(lèi)Result來(lái)統(tǒng)一響應(yīng)結(jié)果,代碼如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;
    private String message;
    private Object data;
    public static Result success(Object data) {
        return new Result(200, "success", data);
    }
    public static Result success() {
        return new Result(200, "success", null);
    }
    public static Result error(String message) {
        return new Result(500, message, null);
    }
    public static Result error(Integer code, String message) {
        return new Result(code, message, null);
    }
}

改造Controller:

@RestController
public class StudentController {
    @RequestMapping("/stu_study")
    public Result study(){
        return Result.success( "根據(jù)SpringBoot開(kāi)發(fā)實(shí)戰(zhàn)學(xué)習(xí)SpringBoot");
    }
    //響應(yīng)實(shí)體對(duì)象
    @RequestMapping("/stu_getAddr")
    public Result getAddr(){
        Address addr = new Address();//創(chuàng)建實(shí)體類(lèi)對(duì)象
        addr.setProvince("湖南");
        addr.setCity("衡陽(yáng)");
        return Result.success(addr);
    }
    //響應(yīng)集合數(shù)據(jù)
    @RequestMapping("/stu_listAddr")
    public Result listAddr(){
        List<Address> list = new ArrayList<>();//集合對(duì)象
        Address addr = new Address();
        addr.setProvince("湖南");
        addr.setCity("衡陽(yáng)");
        Address addr2 = new Address();
        addr2.setProvince("湖南");
        addr2.setCity("長(zhǎng)沙");
        list.add(addr);
        list.add(addr2);
        return  Result.success(list);
    }
}

使用Postman測(cè)試:

前端只需要按照統(tǒng)一格式的返回結(jié)果進(jìn)行解析。

到此這篇關(guān)于SpringBoot請(qǐng)求與響應(yīng)實(shí)例全解析的文章就介紹到這了,更多相關(guān)springboot請(qǐng)求與響應(yīng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java基礎(chǔ)之反射和泛型以及注解

    java基礎(chǔ)之反射和泛型以及注解

    這篇文章主要介紹了 java基礎(chǔ)之反射和泛型以及注解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options詳解

    Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options詳解

    這篇文章主要介紹了Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot測(cè)試之@SpringBootTest與MockMvc的實(shí)戰(zhàn)應(yīng)用小結(jié)

    SpringBoot測(cè)試之@SpringBootTest與MockMvc的實(shí)戰(zhàn)應(yīng)用小結(jié)

    本文將深入探討SpringBoot測(cè)試中兩個(gè)核心工具:@SpringBootTest注解與MockMvc測(cè)試框架的實(shí)戰(zhàn)應(yīng)用,幫助開(kāi)發(fā)者構(gòu)建更穩(wěn)健的測(cè)試體系,提高代碼質(zhì)量與可維護(hù)性,感興趣的朋友一起看看吧
    2025-03-03
  • Java并發(fā)編程之重入鎖與讀寫(xiě)鎖

    Java并發(fā)編程之重入鎖與讀寫(xiě)鎖

    這篇文章主要介紹了Java并發(fā)編程之重入鎖與讀寫(xiě)鎖,文中相關(guān)實(shí)例代碼詳細(xì),測(cè)試可用,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-09-09
  • win7下安裝 JDK 基本流程

    win7下安裝 JDK 基本流程

    這篇文章主要介紹了win7下安裝 JDK 基本流程,需要的朋友可以參考下
    2014-05-05
  • Springboot結(jié)合@validated優(yōu)化代碼驗(yàn)證

    Springboot結(jié)合@validated優(yōu)化代碼驗(yàn)證

    這篇文章主要介紹了Springboot與@validated注解結(jié)合從而實(shí)現(xiàn)讓你的代碼驗(yàn)證更清爽,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Springboot使用sharedingjdbc實(shí)現(xiàn)分庫(kù)分表

    Springboot使用sharedingjdbc實(shí)現(xiàn)分庫(kù)分表

    這篇文章主要介紹了Springboot使用sharedingjdbc實(shí)現(xiàn)分庫(kù)分表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 淺析JAVA常用JDBC連接數(shù)據(jù)庫(kù)的方法總結(jié)

    淺析JAVA常用JDBC連接數(shù)據(jù)庫(kù)的方法總結(jié)

    本篇文章是對(duì)在JAVA中常用JDBC連接數(shù)據(jù)庫(kù)的方法進(jìn)行了詳細(xì)的總結(jié)分析,需要的朋友參考下
    2013-07-07
  • java如何在應(yīng)用代碼里捕獲線(xiàn)程堆棧

    java如何在應(yīng)用代碼里捕獲線(xiàn)程堆棧

    這篇文章主要為大家介紹了java如何在應(yīng)用代碼里捕獲線(xiàn)程堆棧實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java?定時(shí)任務(wù)技術(shù)趨勢(shì)詳情

    Java?定時(shí)任務(wù)技術(shù)趨勢(shì)詳情

    這篇文章主要介紹了Java?定時(shí)任務(wù)技術(shù)趨勢(shì)詳情,定時(shí)任務(wù)是每個(gè)業(yè)務(wù)常見(jiàn)的需求,比如每分鐘掃描超時(shí)支付的訂單,每小時(shí)清理一次數(shù)據(jù)庫(kù)歷史數(shù)據(jù),每天統(tǒng)計(jì)前一天的數(shù)據(jù)并生成報(bào)表等,下文更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論

商水县| 益阳市| 石门县| 临潭县| 广河县| 富平县| 秀山| 乌拉特前旗| 凉山| 永兴县| 渑池县| 淮阳县| 松阳县| 文化| 甘泉县| 南江县| 宝坻区| 辉南县| 合阳县| 孟津县| 高台县| 泽库县| 准格尔旗| 昌宁县| 宁河县| 迁安市| 巨野县| 罗定市| 礼泉县| 雅江县| 青岛市| 永安市| 普陀区| 福贡县| 珠海市| 太仆寺旗| 江华| 恩平市| 东乌| 五大连池市| 凯里市|