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.properties
ValidationMessages_zh_CN.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) {
...
}
推荐阅读
分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。
SpringMVC表单验证器的更多相关文章
- SpringMVC 表单验证
SpringMVC 表单验证 本章节内容很丰富,主要有基本的表单操作,数据的格式化,数据的校验,以及提示信息的国际化等实用技能. 首先看效果图 项目结构图 接下来用代码重点学习SpringMVC的表单 ...
- Angular5+ 自定义表单验证器
Angular5+ 自定义表单验证器 Custom Validators 标签(空格分隔): Angular 首先阐述一下遇到的问题: 怎样实现"再次输入密码"的验证(两个cont ...
- JFinal极速开发实战-业务功能开发-通用表单验证器
提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...
- springmvc表单验证
http://blog.csdn.net/daryl715/article/details/1645880 http://blog.csdn.net/shuwei003/article/details ...
- SpringMVC表单验证与Velocity整合
阅读本文约“1.2分钟” 定义表单类 以Login为例,有username和password两个字段 import javax.validation.constraints.NotNull; impo ...
- 五十四:WTForms表单验证之自定义表单验证器
如果想要对表单中的某个字段进行自定义验证,则需要对这个字段进行单独的验证1.定义一个方法,命名规则为:validate_字段名(self, filed)2.在方法中,使用filed.data获取字段的 ...
- AngularJS自定义表单验证器
<!doctype html> <html ng-app="myApp"> <head> <script src="G:\\So ...
- @valid表单验证demo
springMVC 表单验证demo 视图层使用的是jsp
- 如何优雅的使用 Angular 表单验证
随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...
随机推荐
- Machine Learning:机器学习算法
原文链接:https://riboseyim.github.io/2018/02/10/Machine-Learning-Algorithms/ 摘要 机器学习算法分类:监督学习.半监督学习.无监督学 ...
- Code Festival 2017 Qual B E Popping Balls
传送门 神仙计数! 我的计数真的好差啊= = 不过这个题真的神仙 看了题解把整个过程在草稿纸上重写了一遍才想明白= =(一张草稿纸就没有了!!!) 计数的关键就是在于 枚举的有效性和独立性[不能重复计 ...
- autoit3 脚本自动安装实例
软件自动安装的相关实例!贴出来用于参考,并部分相关语法与示例 #RequireAdmin If DriveMapGet("T:")=="" Then Drive ...
- python如何在shell命令行执行创建用户命令
- springmvc 的 @PathVariable
@PathVariable映射 URL 绑定的占位符 通过 @PathVariable 可以将 URL 中占位符参数绑定到控 •制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@Path ...
- flutter动态列表
在前面一篇总结flutter里面的列表组件ListView的时候,一直都是使用的静态数据,但是在实际的运用过程中,数据都是从后台获取的动态数据,不能再像前面那样写静态数据了,下面模拟一下如果使用动态数 ...
- Oracle数据库之触发器(二)
DML触发器是指在进行insert.update或delete操作时触发的程序体.如果你想在用户对数据进行操作时,记录或限制其操作,就可以用DML触发器.举例来说,我想统计我的网站用户的注册.注销或者 ...
- LOJ 2557 「CTSC2018」组合数问题 (46分)
题目:https://loj.ac/problem/2557 第一个点可以暴搜. 第三个点无依赖关系,k=3,可以 DP .dp[ cr ][ i ][ j ] 表示前 cr 个任务.第一台机器最晚完 ...
- window使用
运行命令 regedit #注册表编译器 firewall.cpl #打开防火墙配置 powershell #打开powershell control #打开控制面版 cnpa.cpl #打开网络设置 ...
- [CSP-S模拟测试]:marshland(最大费用可行流)
题目描述 前方有一片沼泽地.方便地,我们用一个$n\times n$的网格图来描述它,每一个格子代表着沼泽地的一小片区域.其中$(1,1)$代表网格图的左上角,$(n,n)$代表网格图的右下角.若用$ ...