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
- JavaScript 表單及表單驗證JavaScript
- bootstrap表單驗證boot
- javascript表單驗證JavaScript
- Laravel 表單驗證Laravel
- JavaScript 表單驗證JavaScript
- Django表單驗證Django
- jquery 表單驗證jQuery
- Js表單驗證JS
- 使用Validator做SpringMVC的驗證框架 - Validator前端驗證SpringMVC框架前端
- ASP伺服器端表單驗證類伺服器
- 前端表單驗證的目的前端
- 如何使用angularjs實現表單驗證AngularJS
- 裝飾模式-使用裝飾器來寫表單驗證外掛模式
- 表單required 必需驗證UI
- 表單資料驗證
- HTML 表單驗證概述HTML
- bootstrapValidator 表單驗證boot
- 表單驗證——筆記筆記
- angularjs表單驗證AngularJS
- JavaScript表單驗證事件JavaScript事件
- ElementUi rules表單驗證UI
- 表單驗證<AngularJs>AngularJS
- Web 表單驗證 javascriptWebJavaScript
- 使用Validator做SpringMVC的驗證框架 - 配置SpringMVC環境SpringMVC框架
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- 表單驗證設計的使用者體驗基本原則
- Lumen 仿 Laravel 表單驗證Laravel
- 表單驗證教程簡介
- Layui 自定義表單驗證UI
- Laravel 的 表單驗證,多場景Laravel
- 常用的表單驗證程式碼分享
- Seam中的JSF表單驗證JS
- 一種簡單好用的Vue表單驗證Vue
- vue表單驗證你真的會了嗎?元件之表單驗證(form)validateVue元件ORM
- iview表單驗證問題 Select驗證必填失敗,以及表單物件巢狀陣列驗證方法View物件巢狀陣列