哪种网站,百度网盘登录入口官网,搜外友链平台,网站界面ui设计国家开放大学答案转载自 SpringMVC表单验证器的使用本章讲解SpringMVC中怎么通过注解对表单参数进行验证。
SpringBoot配置
使用springboot#xff0c; spring-boot-starter-web会自动引入 hiberante-validator, validation-api依赖。
在 WebMvcConfigurerAdapter实现类里面添加验证器及国际化…转载自 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-apijar包下的 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)ResponseBodyObject handleEntityException(HttpServletRequest request, Throwable ex) {...if (ex instanceof BindException) {BindException c (BindException) ex;ListObjectError 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) {
...
}