SpringMVC表單驗證器的使用
本章講解SpringMVC中怎麼通過註解對錶單引數進行驗證。
SpringBoot配置
使用springboot, spring-boot-starter-web
會自動引入 hiberante-validator
, validation-api
依賴。
在 WebMvcConfigurerAdapter
實現類裡面新增驗證器及國際化指定資原始檔。
@Override public Validator getValidator() { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.setValidationMessageSource(messageSource()); return validator; } @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("i18n/ValidationMessages"); messageSource.setDefaultEncoding(StandardCharsets.US_ASCII.name()); return messageSource; }
驗證器使用
接收引數的表單類:
public class LoginForm { @NotNull(message = "{login.loginName.length}") @Size(min = 4, max = 20, message = "{login.loginName.length}") private String loginName; @NotNull(message = "{login.loginPassword.length}") @Size(min = 8, max = 20, message = "{login.loginPassword.length}") private String loginPassword; public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } public String getLoginPassword() { return loginPassword; } public void setLoginPassword(String loginPassword) { this.loginPassword = loginPassword; } }
在要驗證的欄位上面加入驗證註解,更多參考 validation-api
jar包下的 javax.validation.constraints
包。
SpringMVC控制器:
@PostMapping(value = "/login") public String login(@Validated LoginForm form) { ... }
使用 @Validated
註解表示該引數需要驗證。
國際化
message裡面 {}
引用的是國際化的資源。
新增國際化資原始檔:
ValidationMessages.propertiesValidationMessageszhCN.properties
需要指定編碼為 ASCII
,不然會亂碼。
異常處理
異常全域性處理時進行處理:
@ControllerAdvice public class ExceptionResolver { @ExceptionHandler(Throwable.class) @ResponseBody Object handleEntityException(HttpServletRequest request, Throwable ex) { ... if (ex instanceof BindException) { BindException c = (BindException) ex; List<ObjectError> errors = c.getBindingResult().getAllErrors(); StringBuilder errorMsg = new StringBuilder(); errors.forEach(x -> errorMsg.append(x.getDefaultMessage()).append(",")); } ... } }
或者在驗證的類後面加 BindingResult
,錯誤資訊都會放在該物件裡面,而不會丟擲異常。如:
@PostMapping(value = "/login") public String login(@Validated LoginForm form, BindingResult bindingResult) { ... }
相關文章
- Laravel 表單驗證器的幾種使用方法Laravel
- 表單驗證使用擴充套件套件
- 如何優雅的使用 Angular 表單驗證Angular
- Laravel 表單驗證Laravel
- javascript表單驗證JavaScript
- bootstrap表單驗證boot
- bootstrapValidator 表單驗證boot
- JavaScript 表單驗證JavaScript
- antd 表單驗證
- 前端表單驗證的目的前端
- 裝飾模式-使用裝飾器來寫表單驗證外掛模式
- 表單required 必需驗證UI
- HTML 表單驗證概述HTML
- 表單資料驗證
- 表單驗證 regex:pattern
- 輸入表單驗證
- 路由表單驗證路由
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- hyperf 驗證器的使用
- vue表單驗證你真的會了嗎?元件之表單驗證(form)validateVue元件ORM
- Laravel 的 表單驗證,多場景Laravel
- iview表單驗證問題 Select驗證必填失敗,以及表單物件巢狀陣列驗證方法View物件巢狀陣列
- jquery.validate 表單驗證jQuery
- validate表單驗證外掛
- Lumen 仿 Laravel 表單驗證Laravel
- 表單驗證教程簡介
- Layui 自定義表單驗證UI
- 表單驗證工具類ValidationUtils
- 使用 Laravel 請求類來驗證表單請求Laravel
- elementui表單驗證 對比兩個表單大小UI
- Laravel 自定義表單驗證-自定義驗證規則Laravel
- jQuery Validate表單驗證(使用者註冊簡單應用)jQuery
- 實現elementUI表單的全域性驗證UI
- 用onsubmit做簡單表單驗證(37)MIT
- jQuery表單驗證效果詳解jQuery
- 純CSS實現表單驗證CSS
- JavaScript表單不為空驗證JavaScript
- 實戰表單驗證學習