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

SpringBoot?Web請(qǐng)求響應(yīng)詳細(xì)代碼示例

 更新時(shí)間:2024年09月10日 08:59:28   作者:今心上  
在Web開發(fā)中請(qǐng)求和響應(yīng)是必不可少的環(huán)節(jié),Spring Boot Web應(yīng)用中請(qǐng)求響應(yīng)的分層解耦是構(gòu)建高效、可維護(hù)系統(tǒng)的關(guān)鍵實(shí)踐,下面這篇文章主要介紹了SpringBoot?Web請(qǐng)求響應(yīng)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

1. 請(qǐng)求

Postman

Postman是一款功能強(qiáng)大的網(wǎng)頁(yè)調(diào)試發(fā)送網(wǎng)頁(yè)HTTP請(qǐng)求的Chorme插件

作用:常用于進(jìn)行接口測(cè)試

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

  • 原始方式
    在原始的web程序中,獲取請(qǐng)求參數(shù),需要通過HttpServeletRequest對(duì)象手動(dòng)獲取。

    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
      String name = request.getParameter("name");
      String ageStr = request.getParameter("age");
      int age = Integer.parseInt(ageStr);
      System.out.println(name + " : " + age);
      return "OK";
    }
    

    Postman調(diào)試:http://localhost:8080/simpleParam?name=Tom&age=10

  • SpringBoot方式

    @RequestMapping("/simpleParam")
    public String simpleParam(String name,Integer age){
        System.out.println(name + " : " + age);
        return "OK";
    }
    

    如果方法形參名稱與請(qǐng)求參數(shù)名稱不匹配,可以使用@RequestParam 完成映射**RequestParam 中的required屬性默認(rèn)是true,代表該請(qǐng)求參數(shù)必須傳遞,如果不傳遞將報(bào)錯(cuò)。如果該參數(shù)想要設(shè)置可選的,可以將required屬性設(shè)置為false **

    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="username")String name,Integer age){
        System.out.println(name + " : " + age);
        return "OK";
    }
    

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

  • 簡(jiǎn)單實(shí)體對(duì)象
    請(qǐng)求參數(shù)名與形參對(duì)象屬性名相同,定義POJO接收即可

  • 復(fù)雜實(shí)體對(duì)象

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

數(shù)據(jù)集合參數(shù)

  • 數(shù)組參數(shù)

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

    請(qǐng)求參數(shù)名與形參中數(shù)組變量名相同,可以直接使用數(shù)組封裝

    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OK";
    }
    

  • 集合參數(shù)

    請(qǐng)求參數(shù)名與形參集合名稱相同且請(qǐng)求參數(shù)為多個(gè),@RequestParam 綁定參數(shù)關(guān)系

    請(qǐng)求求參數(shù)名與形參中集合變量名相同,通過@RequestParam 綁定參數(shù)關(guān)系

    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OK";
    }
    

日期參數(shù)

使用@DateTimeFormat 注解完成日期參數(shù)格式轉(zhuǎn)換

 @RequestMapping("/dateParam")
 public String dataParam(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){
     System.out.println(updateTime);
     return "OK";
 }

在這里插入圖片描述

JSON參數(shù)

JSON數(shù)據(jù)鍵名與形參對(duì)象屬性名相同,定義POJO類型形參即可接收參數(shù),需要使用 @RequestBody標(biāo)識(shí)

@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user){
    System.out.println(user);
    return "OK";
}

路徑參數(shù)

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

@RequestMapping("/path/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String name){
    System.out.println(id+" : " + name);
    return "OK";
}

2. 響應(yīng)

  • @ResponseBody
  • 類型:方法注解、類注解
  • 位置:Controller方法上/類上
  • 作用:將方法返回值直接響應(yīng),如果返回值是 實(shí)體對(duì)象/集合,將會(huì)轉(zhuǎn)換為JSON格式響應(yīng)
  • 說(shuō)明:@RestController=@Controller+@ResponseBody
  • 統(tǒng)一響應(yīng)結(jié)果

    public class Result{
        //響應(yīng)碼,1代表成功;0代表失敗
        private Integer code;
        //提示信息
        private String msg;
        //返回的數(shù)據(jù)
        private Object data;
        //... 
    }
    

3. 分層解耦

三層架構(gòu)

  • controller:控制層,接收前端發(fā)送的請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理,并響應(yīng)數(shù)據(jù)。
  • service:業(yè)務(wù)邏輯層,處理具體的業(yè)務(wù)邏輯。
  • dao:數(shù)據(jù)訪問層(Data Access Object)(持久層),負(fù)責(zé)數(shù)據(jù)訪問操作,包括數(shù)據(jù)的增刪查改。

分層解耦

  • 內(nèi)聚:軟件中各個(gè)功能模塊內(nèi)部的功能聯(lián)系。
  • 耦合:衡量軟件中各個(gè)層/模塊之間的依賴、關(guān)聯(lián)的程度。
  • 軟件設(shè)計(jì)原則:高內(nèi)聚低耦合。
    • 控制反轉(zhuǎn)Inversion Of Control,簡(jiǎn)稱IOC。對(duì)象的創(chuàng)建控制權(quán)由程序自身轉(zhuǎn)移到外部(容器),這種思想稱為控制反轉(zhuǎn)。
    • 依賴注入Dependency Injection,簡(jiǎn)稱DI。容器為應(yīng)用程序提供運(yùn)行時(shí),所以來(lái)的資源,稱之為依賴注入。
    • Bean對(duì)象IOC容器中創(chuàng)建、管理的對(duì)象,稱之為bean

IOC & DI入門

  • Service層及Dao層的實(shí)現(xiàn)類,交給IOC容器管理

    @Component //交給IOC容器管理
    public class EmpDao implements EmpDao{...}
    
    @Component //交給IOC容器管理
    public class EmpServiceA implements EmpService{...}
    
  • Controller及Service注入運(yùn)行時(shí),依賴的對(duì)象。

    @Component
    public class EmpServiceA implements EmpService{
        @Autowired //依賴注入
        private EmpDao empDao;
    }
    @RestController
    public class EmpController {
        @Autowired //依賴注入
        private EmpService empService;
    }
    

IOC詳解

  • Bean的聲明要把某個(gè)對(duì)象交給IOC容器,需要在對(duì)應(yīng)的類上加上如下注解之一:

    注解說(shuō)明位置
    @Component聲明bean的基礎(chǔ)注解不屬于以下三類時(shí),用此注解
    @Controller@Component的衍生注解標(biāo)注在控制器類上
    @Service@Component的衍生注解標(biāo)注在業(yè)務(wù)類上
    @Repository@Component的衍生注解標(biāo)注在數(shù)據(jù)訪問類上(由于與mybatis整合,用的少)

    注意事項(xiàng)

    • 聲明bean的時(shí)候,可以通過value屬性指定bean的名字,如果美歐指定,默認(rèn)為類名首字母小寫
    • 使用以上四個(gè)注解都可以聲明bean,但是在springboot繼承web開發(fā)中,聲明控制器bean只能用@Controller
  • Bean組件掃描

    • 前面聲明bean的四大注解,想要生效, 還需要被組件掃描注解 ComponentScan 掃描。
    • @ComponentScan 注解雖然沒有顯式配置,但是實(shí)際上以及包含了啟動(dòng)類聲明注解 @SpringBootApplication 中,默認(rèn)掃描的范圍是啟動(dòng)類所在包及其子包。

DI詳解

  • Bean注入

    • @AutoWired 注解,默認(rèn)是按照類型進(jìn)行,如果存在多個(gè)相同類型的bean,將會(huì)報(bào)出如下錯(cuò)誤:

    • 通過以下幾種方案來(lái)解決:

      • @Primary

        @Primary
        @Service
        public class EmpServiceA implements EmpService{}
        
      • @Qualifier

        @RestController
        public class EmpController{
            @Autowired
            @Qualifier("empServiceA")
            private EmpService empService;
        }
        
      • @Resource

        @RestController
        public class EmpController{
        	@Resource(name="empServiceA")
            private EmpService empService;
        }
        
      • @Resource 與 @Autowired 區(qū)別

        • @Autowired 是spring框架提供的注解,而@Resource 是JDK提供的注解。
        • @Autowired 默認(rèn)是按照類型注入,而@Resource 默認(rèn)是按照名稱注入。

總結(jié) 

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

相關(guān)文章

  • java String的intern方法

    java String的intern方法

    本文主要介紹java 中String 的intern方法,這里主要通過實(shí)例來(lái)說(shuō)明不同版本的JDK,intern方法的對(duì)比,有需要的小伙伴可以參考下
    2016-07-07
  • 基于springboot的flowable工作流實(shí)戰(zhàn)流程分析

    基于springboot的flowable工作流實(shí)戰(zhàn)流程分析

    這篇文章主要介紹了基于springboot的flowable工作流實(shí)戰(zhàn)流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    windows下使用 intellij idea 編譯 kafka 源碼環(huán)境

    這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項(xiàng)目演示,需要的朋友可以參考下
    2021-10-10
  • Java的JNI快速入門教程(推薦)

    Java的JNI快速入門教程(推薦)

    下面小編就為大家?guī)?lái)一篇Java的JNI快速入門教程(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-09-09
  • JAVA線上常見問題排查手段匯總

    JAVA線上常見問題排查手段匯總

    這篇文章主要介紹了JAVA線上常見問題排查手段匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring?Security圖形驗(yàn)證碼的實(shí)現(xiàn)代碼

    Spring?Security圖形驗(yàn)證碼的實(shí)現(xiàn)代碼

    本文介紹了如何在SpringSecurity自定義認(rèn)證中添加圖形驗(yàn)證碼,首先需要在maven中添加相關(guān)依賴并創(chuàng)建驗(yàn)證碼對(duì)象,然后通過Spring的HttpSessionSessionStrategy對(duì)象將驗(yàn)證碼存儲(chǔ)到Session中,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 淺析java的foreach循環(huán)

    淺析java的foreach循環(huán)

    foreach語(yǔ)句是java5之后的新特征之一,在循環(huán)遍歷數(shù)組、集合方面更加簡(jiǎn)潔,有需要的朋友可以參考一下
    2013-12-12
  • Effective Java (異常處理)

    Effective Java (異常處理)

    Effective Java (異常處理),需要的朋友可以參考一下
    2013-02-02
  • SpringBoot?如何通過?Profile?實(shí)現(xiàn)不同環(huán)境下的配置切換

    SpringBoot?如何通過?Profile?實(shí)現(xiàn)不同環(huán)境下的配置切換

    SpringBoot通過profile實(shí)現(xiàn)在不同環(huán)境下的配置切換,比如常見的開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境,SpringBoot常用配置文件主要有?2?種:properties?文件和yml文件,本文給大家詳細(xì)介紹SpringBoot?通過?Profile?實(shí)現(xiàn)不同環(huán)境下的配置切換,感興趣的朋友一起看看吧
    2022-08-08
  • java計(jì)算兩個(gè)日期中間的時(shí)間

    java計(jì)算兩個(gè)日期中間的時(shí)間

    這篇文章主要介紹了java計(jì)算兩個(gè)日期中間的時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

河源市| 恩平市| 徐闻县| 建水县| 北流市| 千阳县| 开阳县| 林芝县| 盈江县| 威信县| 滨海县| 龙井市| 楚雄市| 同仁县| 察雅县| 石棉县| 余姚市| 开封市| 上犹县| 洛宁县| 栾川县| 太和县| 唐河县| 七台河市| 富源县| 邻水| 隆子县| 台山市| 陈巴尔虎旗| 图木舒克市| 通渭县| 凤冈县| 新巴尔虎右旗| 江北区| 台安县| 乌恰县| 简阳市| 东丽区| 遂溪县| 清原| 嫩江县|