javaweb 自動封裝請求頭中的數據(主文章的補充文章)

這是一篇對javaweb BaseServlet 自動封裝數據並調用service方法中提到的內容的補充說明,因爲篇幅太大單獨拿出來講明html

封裝json數據 自動將json存入對應的實體類
前端除了傳遞請求類型,通常還會傳遞數據,好比將用戶在頁面表單填寫的數據以json格式傳給後端用於增刪改查。前端

例圖:VUE基於AXIOS實現異步請求,將json對象傳給後端,json對象中存有請求類型type以及用戶提交的表單數據
注意:該圖僅用於說明json對象須要傳遞,下面說明文章主題時舉例的是「修改」,不是這裏圖中的「添加」
imagejava

傳統的寫法:
①在servlet中使用switch-case分配方法,此時與前端對接的servlet只是將編碼格式進行一個設置,而後取出type判斷須要執行的方法,直接將請求頭和響應頭髮給當前servlet下的對應方法
imageweb

②進入具體的方法後,纔會正式開始解析請求頭的數據,將數據取出存到一個實體對象中,而後再執行業務代碼
imagejson

新的寫法:
如今新的寫法中,但願作到的就是將各種方法中對請求頭的數據解析和轉換放回到servlet下,在servlet下完成數據的封裝,而後再將對象和請求頭、響應頭傳給方法。
實際上這也是實際的項目開發要作到的:
servlet做爲控制層主要的工做就是數據處理,將請求頭數據封裝爲對象,而後只傳遞對象給方法
方法實際都是存放在service下,只接受servlet發送的對象,而後進行邏輯處理,最後給servlet返回對象後端

例圖:servlet只方法傳遞對象和一些數據,不傳遞請求頭和響應頭,而方法則將數據傳給servlet,而不是直接用響應頭去響應前端——響應交給servlet去完成。
注:這裏的自定義註解用來標識當前方法的響應方法,用於父類servlet中的響應代碼判斷當前方法的數據回傳給前端的方式,這個自定義註解的意思是「該方法的響應方式爲AJAX」
image數組

所以要在父類servlet中實現自動對請求頭的數據進行封裝的功能,這樣全部子類servlet都能具有這個功能
①實現了代碼降重
②各子類servlet中更專一於對方法的調用,再也不須要考慮對請求頭的解析
③各子類servlet中的方法的參數表更規範——再也不出現請求頭和響應頭異步

實現過程工具

  1. 首先判斷此時讀取到的方法參數需求是不是一個實體類,若是指向該參數類型的Class對象的全類名包含指定的地址,就代表是一個實體類
  2. 已知此時要處理的Class對象指向的是一個實體類對象,說明方法的參數表在此時須要傳入一個實體對象,對應着前文即傳入一個儲存了json數據的對象
  3. 此時藉助JAVA內置方法將json轉爲map集合,而後基於自定義工具類(實現原理爲反射+泛型,具體原理點擊這裏)將數據封裝爲實體對象,而後存到數組中
    image

上圖的操做中有兩個地方能夠進一步優化
① clazz.getName().contains("常量") 這裏是經過判斷Class對象指向的數據類型的地址是否包含指定常量,以判斷此時的Class對象是否指向的是方法中的實體類
這裏的常量令整個方法存在侷限性,若是方法須要的對象不在如今指定的常量路徑呢 若是別人使用時包名叫bean呢
這種狀況就要進行優化優化方式點擊這裏優化

②使用了自定義的工具類將map集合存入實體對象,實際上從json數據轉爲實體對象,只須要藉助第三方jar包就能實現

相關文章
相關標籤/搜索