spring Boot表單驗(yàn)證錯(cuò)誤信息前端顯示失敗排查
本文分析spring boot應(yīng)用中,后端控制器成功捕獲驗(yàn)證錯(cuò)誤,但前端頁面無法顯示該問題的常見原因:模型屬性名大小寫不一致。
問題現(xiàn)象:
使用Spring Boot構(gòu)建的注冊(cè)表單,利用@Valid注解和Errors對(duì)象進(jìn)行驗(yàn)證。控制器成功捕獲驗(yàn)證錯(cuò)誤,但thymeleaf模板使用th:errors屬性時(shí),頁面未顯示任何錯(cuò)誤提示。調(diào)試信息確認(rèn)控制器已捕獲錯(cuò)誤。
代碼示例分析:
假設(shè)TestUser.Java定義了用戶實(shí)體類,使用hibernate Validator注解(@NotBlank, @Email)進(jìn)行驗(yàn)證。TestUserController.java控制器使用@PostMapping方法接收@Valid TestUser testUser,并用Errors errors接收驗(yàn)證結(jié)果。驗(yàn)證失敗時(shí),返回”user”視圖。關(guān)鍵在于@ModelAttribute(name = “testUser”)方法,它向模型添加名為testUser的屬性。
user.html Thymeleaf模板使用th:Object=”${testuser}”綁定數(shù)據(jù)。此處錯(cuò)誤:控制器屬性名為testUser,模板使用testuser (大小寫不同)。
根本原因:
Thymeleaf模板的th:object=”${testuser}”與控制器模型屬性名testUser不匹配。Thymeleaf找不到testuser對(duì)象,導(dǎo)致無法渲染錯(cuò)誤信息。th:errors依賴于th:object正確綁定模型對(duì)象。
解決方案:
將Thymeleaf模板中的th:object=”${testuser}”修改為th:object=”${testUser}”,使其與控制器模型屬性名一致。修改后,Thymeleaf可正確訪問testUser對(duì)象及其驗(yàn)證錯(cuò)誤信息,從而在頁面顯示錯(cuò)誤提示。