SpringBootWeb請求響應(yīng)

當(dāng)前最為主流的開發(fā)模式:前后端分離

這樣我們后端開發(fā)人員就用到了postman

postman
Postman是一款功能強大的網(wǎng)頁調(diào)試與發(fā)送網(wǎng)頁HTTP請求的Chrome插件。
作用:常用于進(jìn)行接口測試



1.簡單參數(shù)
在原始的web程序中,獲取請求參數(shù),需要通過HttpServletRequest 對象手動獲取。

SpringBoot方式
簡單參數(shù):參數(shù)名與形參變量名相同,定義形參即可接收參數(shù)。
簡單參數(shù):如果方法形參名稱與請求參數(shù)名稱不匹配,可以使用 @RequestParam 完成映射。
注意事項:
@RequestParam中的required屬性默認(rèn)為true,代表該請求參數(shù)必須傳遞,如果不傳遞將報錯。 如果該參數(shù)是可選的,可以將required屬性設(shè)置為false。

小結(jié):
1.原始方式獲取請求參數(shù)
Controller方法形參中聲明HttpServletRequest對象
調(diào)用對象的getParameter(參數(shù)名)
2.SpringBoot中接收簡單參數(shù)
請求參數(shù)名與方法形參變量名相同
會自動進(jìn)行類型轉(zhuǎn)換
3.@RequestParam注解
方法形參名稱與請求參數(shù)名稱不匹配,通過該注解完成映射
該注解的required屬性默認(rèn)是true,代表請求參數(shù)必須傳遞

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

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



小結(jié):
實體對象參數(shù)
規(guī)則:請求參數(shù)名與形參對象屬性名相同,即可直接通過POJO接收

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

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


小結(jié):
數(shù)組集合參數(shù)
數(shù)組:請求參數(shù)名與形參中數(shù)組變量名相同,可以直接使用數(shù)組封裝
集合:請求參數(shù)名與形參中集合變量名相同,通過@RequestParam綁定參數(shù)關(guān)系

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


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


6.路徑參數(shù)
路徑參數(shù):通過請求URL直接傳遞參數(shù),使用{…}來標(biāo)識該路徑參數(shù),需要使用 @PathVariable 獲取路徑參數(shù)



總結(jié):
1.簡單參數(shù)
定義方法形參,請求參數(shù)名與形參變量名一致。
如果不一致,通過@RequestParam手動映射。
2.實體參數(shù)
請求參數(shù)名,與實體對象的屬性名一致,會自動接收封裝
3.數(shù)組集合參數(shù)
數(shù)組:請求參數(shù)名與數(shù)組名一致,直接封裝
集合:請求參數(shù)名與集合名一致,@RequestParam綁定關(guān)系
4.日期參數(shù)
@DateTimeFormat
5.JSON參數(shù)
@RequestBody
6.路徑參數(shù)
@PathVariable

響應(yīng)數(shù)據(jù)

@ResponseBody




小結(jié):
1.@ResponseBody
位置:Controller類上/方法上
作用:將方法返回值直接響應(yīng),若返回值類型是 實體對象/集合 ,轉(zhuǎn)JSON格式響應(yīng)
2.統(tǒng)一響應(yīng)結(jié)果
Result(code、msg、data)

案例:獲取員工數(shù)據(jù),返回統(tǒng)一響應(yīng)結(jié)果,在頁面渲染展示
加載并解析emp.xml文件中的數(shù)據(jù),完成數(shù)據(jù)處理,并在頁面展示。


步驟:
在pom.xml文件中引入dom4j的依賴,用于解析XML文件
引入資料中提供的解析XML的工具類XMLParserUtils、對應(yīng)的實體類Emp、XML文件 emp.xml
引入資料中提供的靜態(tài)頁面文件,放在resources下的static目錄下
編寫Controller程序,處理請求,響應(yīng)數(shù)據(jù)
第一步:
第二步:

第三步:

第四步:
這種寫法復(fù)用性差,難以維護(hù)

分層解耦
三層架構(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)聚:軟件中各個功能模塊內(nèi)部的功能聯(lián)系。
耦合:衡量軟件中各個層/模塊之間的依賴、關(guān)聯(lián)的程度。
軟件設(shè)計原則:高內(nèi)聚低耦合。

控制反轉(zhuǎn): Inversion Of Control,簡稱IOC。對象的創(chuàng)建控制權(quán)由程序自身轉(zhuǎn)移到外部(容器),這種思想稱為控制反轉(zhuǎn)。
依賴注入: Dependency Injection,簡稱DI。容器為應(yīng)用程序提供運行時,所依賴的資源,稱之為依賴注入。
Bean對象:IOC容器中創(chuàng)建、管理的對象,稱之為bean。

IOC & DI 入門
①. Service層 及 Dao層的實現(xiàn)類,交給IOC容器管理。


②. 為Controller及Service注入運行時,依賴的對象。


③. 運行測試。

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

注意事項:
聲明bean的時候,可以通過value屬性指定bean的名字,如果沒有指定,默認(rèn)為類名首字母小寫。
使用以上四個注解都可以聲明bean,但是在springboot集成web開發(fā)中,聲明控制器bean只能用@Controller。

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

DI詳解
Bean注入
@Autowired注解,默認(rèn)是按照類型進(jìn)行,如果存在多個相同類型的bean,將會報錯
通過以下幾種方案來解決:
@Primary
@Qualifier
@Resource




小結(jié):
1.依賴注入的注解:
@Autowired:默認(rèn)按照類型自動裝配。
如果同類型的bean存在多個:
@Primary
@Autowired + @Qualifier("bean的名稱")
@Resource(name="bean的名稱")
2. @Resource 與 @Autowired區(qū)別
@Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解。
@Autowired 默認(rèn)是按照類型注入,而@Resource默認(rèn)是按照名稱注入。