日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

java元婴期(30)----java进阶(springmvc(4)---参数绑定(下)springmvc校验异常处理)

發布時間:2025/3/21 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java元婴期(30)----java进阶(springmvc(4)---参数绑定(下)springmvc校验异常处理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

包裝類型pojo參數綁定

需求

商品查詢controller方法中實現商品查詢條件傳入。

實現方法

  • 第一種方法:在形參中 添加HttpServletRequest request參數,通過request接收查詢條件參數。
  • 第二種方法:在形參中讓包裝類型的pojo接收查詢條件參數。

???????? 分析:

???????? 頁面傳參數的特點:復雜,多樣性。條件包括 :用戶賬號、商品編號、訂單信息。。。

???????? 如果將用戶賬號、商品編號、訂單信息等放在簡單pojo(屬性是簡單類型)中,pojo類屬性比較多,比較亂。

???????? 建議使用包裝類型的pojo,pojo中屬性是pojo。

頁面參數和controller方法形參定義

頁面參數:

???????? 商品名稱:<input name="itemsCustom.name" />

???????? 注意:itemsCustom和包裝pojo中的屬性一致即可。

controller方法形參:

???????? public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo) throws Exception

集合類型綁定

數組綁定

需求

商品批量刪除,用戶在頁面選擇多個商品,批量刪除。

?

表現層實現

關鍵:將頁面選擇(多選)的商品id,傳到controller方法的形參,方法形參使用數組接收頁面請求的多個商品id。(思路)

controller方法定義:

頁面定義:

list綁定

需求

通常在需要批量提交數據時,將提交的數據綁定到list<pojo>中,比如:成績錄入(錄入多門課成績,批量提交),

本例子需求:批量商品修改,在頁面輸入多個商品信息,將多個商品信息提交到controller方法中。

表現層實現

controller方法定義:

  • 進入批量商品修改頁面(頁面樣式參考商品列表實現)
  • 批量修改商品提交
  • ?使用List接收頁面提交的批量數據,通過包裝pojo接收,在包裝pojo中定義list<pojo>屬性

    頁面定義:

    ?

    map綁定

    ?

    也通過在包裝pojo中定義map類型屬性。

    在包裝類中定義Map對象,并添加get/set方法,action使用包裝對象接收。

    包裝類中定義Map對象如下:

    Public class QueryVo { private Map<String, Object> itemInfo = new HashMap<String, Object>();//get/set方法.. }

    頁面定義如下:

    <tr> <td>學生信息:</td> <td> 姓名:<inputtype="text"name="itemInfo['name']"/> 年齡:<inputtype="text"name="itemInfo['price']"/> .. .. .. </td> </tr>

    Contrller方法定義如下:

    public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{ System.out.println(queryVo.getStudentinfo()); }

    ?

    springmvc校驗

    校驗理解

    項目中,通常使用較多是前端的校驗,比如頁面中js校驗。對于安全要求較高點建議在服務端進行校驗。

    服務端校驗:

    ???????? 控制層conroller:校驗頁面請求的參數的合法性。在服務端控制層conroller校驗,不區分客戶端類型(瀏覽器、手機客戶端、遠程調用)

    ???????? 業務層service(使用較多):主要校驗關鍵業務參數,僅限于service接口中使用的參數。

    ???????? 持久層dao:一般是不校驗的。

    springmvc校驗需求

    springmvc使用hibernate的校驗框架validation(和hibernate沒有任何關系)。

    校驗思路:

    ???????? 頁面提交請求的參數,請求到controller方法中,使用validation進行校驗。如果校驗出錯,將錯誤信息展示到頁面。

    具體需求:

    ???????? 商品修改,添加校驗(校驗商品名稱長度,生產日期的非空校驗),如果校驗出錯,在商品修改頁面顯示錯誤信息。

    環境準備

    hibernate的校驗框架validation所需要jar包:

    配置校驗器

    校驗器注入到處理器適配器中

    ?

    在pojo中添加校驗規則

    在ItemsCustom.java中添加校驗規則:

    CustomValidationMessages.properties

    在CustomValidationMessages.properties配置校驗錯誤信息:

    捕獲校驗錯誤信息

    //在需要校驗的pojo前邊添加@Validated,在需要校驗的pojo后邊添加BindingResult bindingResult接收校驗出錯信息

    ?? //注意:@ValidatedBindingResult bindingResult是配對出現,并且形參順序是固定的(一前一后)。

    在頁面顯示校驗錯誤信息

    在controller中將錯誤信息傳到頁面即可。

    頁面顯示錯誤信息:

    ?

    分組校驗

    需求

    在pojo中定義校驗規則,而pojo是被多個 controller所共用,當不同的controller方法對同一個pojo進行校驗,但是每個controller方法需要不同的校驗。

    解決方法:

    定義多個校驗分組(其實是一個java接口),分組中定義有哪些規則

    每個controller方法使用不同的校驗分組

    校驗分組

    在校驗規則中添加分組

    在controller方法使用指定分組的校驗

    ?

    ?

    ?

    ?

    異常處理

    系統中異常包括兩類:預期異常運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,后者主要通過規范代碼開發、測試通過手段減少運行時異常的發生。

    ???????? 系統的dao、service、controller出現都通過throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進行異常處理,如下圖:

    springmvc提供全局異常處理器(一個系統只有一個異常處理器)進行統一異常處理。

    ??????????????自定義異常類

    對不同的異常類型定義異常類,繼承Exception。

    全局異常處理器

    思路:

    ???????? 系統遇到異常,在程序中手動拋出,dao拋給service、service給controller、controller拋給前端控制器,前端控制器調用全局異常處理器。

    ???????? 全局異常處理器處理思路:

    ?????????????????? 解析出異常類型

    • ?????????????????? 如果該 異常類型是系統 自定義的異常,直接取出異常信息,在錯誤頁面展示
    • ?????????????????? 如果該 異常類型不是系統 自定義的異常,構造一個自定義的異常類型(信息為“未知錯誤”)

    springmvc提供一個HandlerExceptionResolver接口

    @Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) {//handler就是處理器適配器要執行Handler對象(只有method)// 解析出異常類型 // 如果該 異常類型是系統 自定義的異常,直接取出異常信息,在錯誤頁面展示 // String message = null; // if(ex instanceof CustomException){ // message = ((CustomException)ex).getMessage(); // }else{如果該 異常類型不是系統 自定義的異常,構造一個自定義的異常類型(信息為“未知錯誤”) // message="未知錯誤"; // }//上邊代碼變為CustomException customException = null;if(ex instanceof CustomException){customException = (CustomException)ex;}else{customException = new CustomException("未知錯誤");}//錯誤信息String message = customException.getMessage();ModelAndView modelAndView = new ModelAndView();//將錯誤信息傳到頁面modelAndView.addObject("message", message);//指向錯誤頁面modelAndView.setViewName("error");return modelAndView;}

    錯誤頁面

    在springmvc.xml配置全局異常處理器

    異常測試

    在controller、service、dao中任意一處需要手動拋出異常。

    如果是程序中手動拋出的異常,在錯誤頁面中顯示自定義的異常信息,如果不是手動拋出異常說明是一個運行時異常,在錯誤頁面只顯示“未知錯誤”。

    在商品修改的controller方法中拋出異常 .

    在service接口中拋出異常:

    如果與業務功能相關的異常,建議在service中拋出異常。

    與業務功能沒有關系的異常,建議在controller中拋出。

    上邊的功能,建議在service中拋出異常。

    總結

    以上是生活随笔為你收集整理的java元婴期(30)----java进阶(springmvc(4)---参数绑定(下)springmvc校验异常处理)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。