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

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

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

1. 請求

Postman

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

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

簡單參數(shù)

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

    @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";
    }
    

    如果方法形參名稱與請求參數(shù)名稱不匹配,可以使用@RequestParam 完成映射**RequestParam 中的required屬性默認(rèn)是true,代表該請求參數(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ù)

  • 簡單實(shí)體對象
    請求參數(shù)名與形參對象屬性名相同,定義POJO接收即可

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

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

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

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

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

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

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

  • 集合參數(shù)

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

    請求求參數(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ù)鍵名與形參對象屬性名相同,定義POJO類型形參即可接收參數(shù),需要使用 @RequestBody標(biāo)識

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

路徑參數(shù)

通過請求URL直接傳遞參數(shù),使用{…}來標(biāo)識該路徑參數(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í)體對象/集合,將會轉(zhuǎn)換為JSON格式響應(yīng)
  • 說明:@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ā)送的請求,對請求進(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,簡稱IOC。對象的創(chuàng)建控制權(quán)由程序自身轉(zhuǎn)移到外部(容器),這種思想稱為控制反轉(zhuǎn)。
    • 依賴注入Dependency Injection,簡稱DI。容器為應(yīng)用程序提供運(yùn)行時(shí),所以來的資源,稱之為依賴注入。
    • Bean對象IOC容器中創(chuàng)建、管理的對象,稱之為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í),依賴的對象。

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

IOC詳解

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

    注解說明位置
    @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í)際上以及包含了啟動類聲明注解 @SpringBootApplication 中,默認(rèn)掃描的范圍是啟動類所在包及其子包。

DI詳解

  • Bean注入

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

    • 通過以下幾種方案來解決:

      • @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請求響應(yīng)的文章就介紹到這了,更多相關(guān)SpringBoot Web請求響應(yīng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis-flex與springBoot整合的實(shí)現(xiàn)示例

    mybatis-flex與springBoot整合的實(shí)現(xiàn)示例

    Mybatis-flex提供了簡單易用的API,開發(fā)者只需要簡單的配置即可使用,本文主要介紹了mybatis-flex與springBoot整合,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • JavaWeb監(jiān)聽器Listener實(shí)例解析

    JavaWeb監(jiān)聽器Listener實(shí)例解析

    這篇文章主要為大家詳細(xì)介紹了JavaWeb監(jiān)聽器Listener實(shí)例,針對監(jiān)聽器進(jìn)行進(jìn)行細(xì)致分析,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 關(guān)于SpringCloud的微服務(wù)結(jié)構(gòu)及微服務(wù)遠(yuǎn)程調(diào)用

    關(guān)于SpringCloud的微服務(wù)結(jié)構(gòu)及微服務(wù)遠(yuǎn)程調(diào)用

    Spring Cloud 是一套完整的微服務(wù)解決方案,基于 Spring Boot 框架,準(zhǔn)確的說,它不是一個(gè)框架,而是一個(gè)大的容器,它將市面上較好的微服務(wù)框架集成進(jìn)來,從而簡化了開發(fā)者的代碼量,需要的朋友可以參考下
    2023-05-05
  • Java中浮點(diǎn)數(shù)精度問題的解決方法

    Java中浮點(diǎn)數(shù)精度問題的解決方法

    這篇文章給大家介紹了Java中浮點(diǎn)數(shù)精度問題的解決方法,本文給大家介紹的非常詳細(xì),有問題描述有原因分析,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-10-10
  • Java利用深度搜索解決數(shù)獨(dú)游戲詳解

    Java利用深度搜索解決數(shù)獨(dú)游戲詳解

    數(shù)獨(dú)是一項(xiàng)非常簡單的任務(wù)。玩家需要根據(jù)9×9盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個(gè)粗線宮(3*3)內(nèi)的數(shù)字均含1-9,不重復(fù)。本文將利用Java編寫一個(gè)程序來解決給定的數(shù)獨(dú)任務(wù),感興趣的可以動手嘗試一下
    2022-08-08
  • mybatis攔截器與分頁插件實(shí)例教程

    mybatis攔截器與分頁插件實(shí)例教程

    Mybatis攔截器常常會被用來進(jìn)行分頁處理。所以下面這篇文章主要給大家介紹了關(guān)于mybatis攔截器與分頁插件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java實(shí)現(xiàn)單詞倒序輸出

    Java實(shí)現(xiàn)單詞倒序輸出

    這篇文章主要介紹了Java實(shí)現(xiàn)單詞倒序輸出,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • java對同一個(gè)文件進(jìn)行讀寫操作方法

    java對同一個(gè)文件進(jìn)行讀寫操作方法

    在本篇文章里我們給大家詳細(xì)講述了java對同一個(gè)文件進(jìn)行讀寫操作的方法和知識點(diǎn),需要的朋友們可以參考學(xué)習(xí)下。
    2018-10-10
  • idea中如何過濾某些文件不提交的方法實(shí)現(xiàn)

    idea中如何過濾某些文件不提交的方法實(shí)現(xiàn)

    本文主要介紹了idea中如何過濾某些文件不提交,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • mybatis判斷l(xiāng)ist不為空/大小的問題

    mybatis判斷l(xiāng)ist不為空/大小的問題

    這篇文章主要介紹了mybatis判斷l(xiāng)ist不為空/大小的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評論