功能模塊:
- RestController模塊
- 加載自定義bean
- 自定義JSON序列化反序化列
- 統(tǒng)一異常處理
- 攔截器+自定義注解(實(shí)現(xiàn)權(quán)限校驗(yàn)等)
- 返回結(jié)果統(tǒng)一封裝
- 上下文傳遞(ThreadLocal實(shí)現(xiàn))
項(xiàng)目初始化:
從 http://start.spring.io 網(wǎng)站上面選擇創(chuàng)建自己的項(xiàng)目腳手架。
dependencies中添加web的依賴职员,generate project 下載項(xiàng)目才沧。
添加自定義的bean
有些業(yè)務(wù)場(chǎng)景下面我們需要自己定義的bean或者第三方的bean交給spring ioc容器去管理
實(shí)現(xiàn)代碼如下:
自定義JSON序列化反序化列
Spring內(nèi)部采用Jackson實(shí)現(xiàn)對(duì)象的序列化和反序列化牲证。
這里只要自己在容器初始化的時(shí)候犁钟,將自己的ObjectMapper的對(duì)象實(shí)例加載到容器中影锈,
spring就會(huì)優(yōu)先使用用戶添加的對(duì)象就轧。
這里也是體現(xiàn)約定大于配置的思想概作。
實(shí)現(xiàn)代碼如下:
統(tǒng)一異常處理
業(yè)務(wù)系統(tǒng)中嗜价,在寫代碼的時(shí)候捕捉了一個(gè)異常落萎,需要將錯(cuò)誤信息封裝給調(diào)用方。
由于異程考簦或者錯(cuò)誤的方式類型是有限的练链,但是隨著業(yè)務(wù)的擴(kuò)大,拋出異常和發(fā)生錯(cuò)誤的地方確會(huì)變得越來(lái)越來(lái)多奴拦。
有了統(tǒng)一的異常處理方式媒鼓,這樣就可以在業(yè)務(wù)代碼里面大膽放心的拋出異常。
實(shí)現(xiàn)代碼如下:
攔截器+自定義注解(實(shí)現(xiàn)權(quán)限校驗(yàn)等)
業(yè)務(wù)框架中攔截器必不可少错妖,但是spring提供的根據(jù)資源地址的攔截方式绿鸣,將攔截的行為和代碼分開了。
如果是能通過注解的方式進(jìn)行攔截暂氯,進(jìn)而處理相應(yīng)的邏輯潮模。
這樣在寫業(yè)務(wù)代碼的時(shí)候就可以指定攔截邏輯,而不用在去做spring的配置痴施。
實(shí)現(xiàn)代碼如下:
返回結(jié)果統(tǒng)一封裝
在請(qǐng)求應(yīng)答的業(yè)務(wù)中擎厢,我們通尘苛鳎回合調(diào)用方約定一種固定的應(yīng)答模式經(jīng)典案例就是{code,msg,result}這種方式。
但是在我們書寫具體業(yè)務(wù)的時(shí)候动遭,其實(shí)這種對(duì)象的封裝和業(yè)務(wù)并沒有關(guān)聯(lián)芬探。
比如我這個(gè)方法是查詢用戶信息的,那我的返回值就是返回用戶對(duì)象厘惦,所以固定的應(yīng)答結(jié)構(gòu)應(yīng)該交給框架來(lái)做偷仿。
實(shí)現(xiàn)代碼如下:
上下文傳遞(ThreadLocal實(shí)現(xiàn))
在一個(gè)有用戶登錄的系統(tǒng)中,特別是http協(xié)議中宵蕉,我們經(jīng)常和調(diào)用方約定將某些標(biāo)識(shí)類的信息通過http的header信息傳達(dá)給服務(wù)端酝静。
而在spring幫我封裝好的controller里面我們又不方便去獲取請(qǐng)求頭中的信息。
所以這里實(shí)現(xiàn)一個(gè)簡(jiǎn)單的上下文信息傳遞羡玛。
實(shí)現(xiàn)代碼如下: