功能模塊:
- RestController模塊
- 加載自定義bean
- 自定義JSON序列化反序化列
- 統一異常處理
- 攔截器+自定義注解(實現權限校驗等)
- 返回結果統一封裝
- 上下文傳遞(ThreadLocal實現)
項目初始化:
從 http://start.spring.io 網站上面選擇創建自己的項目腳手架。
dependencies中添加web的依賴,generate project 下載項目。
添加自定義的bean
有些業務場景下面我們需要自己定義的bean或者第三方的bean交給spring ioc容器去管理
實現代碼如下:
image.png
自定義JSON序列化反序化列
Spring內部采用Jackson實現對象的序列化和反序列化。
這里只要自己在容器初始化的時候,將自己的ObjectMapper的對象實例加載到容器中,
spring就會優先使用用戶添加的對象。
這里也是體現約定大于配置的思想。
實現代碼如下:
image.png
統一異常處理
業務系統中,在寫代碼的時候捕捉了一個異常,需要將錯誤信息封裝給調用方。
由于異常或者錯誤的方式類型是有限的,但是隨著業務的擴大,拋出異常和發生錯誤的地方確會變得越來越來多。
有了統一的異常處理方式,這樣就可以在業務代碼里面大膽放心的拋出異常。
實現代碼如下:
image.png
攔截器+自定義注解(實現權限校驗等)
業務框架中攔截器必不可少,但是spring提供的根據資源地址的攔截方式,將攔截的行為和代碼分開了。
如果是能通過注解的方式進行攔截,進而處理相應的邏輯。
這樣在寫業務代碼的時候就可以指定攔截邏輯,而不用在去做spring的配置。
實現代碼如下:
image.png
返回結果統一封裝
在請求應答的業務中,我們通常回合調用方約定一種固定的應答模式經典案例就是{code,msg,result}這種方式。
但是在我們書寫具體業務的時候,其實這種對象的封裝和業務并沒有關聯。
比如我這個方法是查詢用戶信息的,那我的返回值就是返回用戶對象,所以固定的應答結構應該交給框架來做。
實現代碼如下:
image.png
上下文傳遞(ThreadLocal實現)
在一個有用戶登錄的系統中,特別是http協議中,我們經常和調用方約定將某些標識類的信息通過http的header信息傳達給服務端。
而在spring幫我封裝好的controller里面我們又不方便去獲取請求頭中的信息。
所以這里實現一個簡單的上下文信息傳遞。
實現代碼如下:
image.png
image.png
image.png