SpringMVC表单验证器的使用
转载自 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)@ResponseBodyObject 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) {... }
SpringMVC表单验证器的使用相关推荐
- SpringMVC 表单验证
SpringMVC 表单验证 本章节内容很丰富,主要有基本的表单操作,数据的格式化,数据的校验,以及提示信息的国际化等实用技能. 首先看效果图 然后项目目录结构图 接下来用代码重点学习SpringMV ...
- Django 表单验证之自定义表单验证器
本文基于Django 表单验证 一文,补充完善表单验证器之自定义表单验证器 具体步骤总结如下: 第一:在formValidation.py 文件中,添加自定义名称敏感验证器(NameValidatio ...
- SpringMVC表单验证与Velocity整合
阅读本文约"1.2分钟" 定义表单类 以Login为例,有username和password两个字段 import javax.validation.constraints.Not ...
- 如何优雅的使用 Angular 表单验证
随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...
- 真正简单的基于prototype的表单验证
由 searchadmin 于 周二, 10/16/2007 - 06:44 提交. 真正简单的基于prototype的表单验证 tag:prototype 数据验证 表单验证 validator j ...
- Web框架——Flask系列之WTF表单验证练习(七)
一.Web表单 web表单是web应用程序的基本功能. 它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过表单将 ...
- angular js创建表单_如何优雅的使用 Angular 表单验证
随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...
- 12个方便易用的jquery表单验证插件
绝大部分网站都是开放注册的,而注册就需要使用表单验证,因为网站都需要对注册用户的信息安全性和合理性做出判断,表单的注册都应该具备完善的验证方式,比如注册使用的手机号是否是真实的?用户填写的验证码是否正 ...
- Angular 表单验证
模板驱动验证 使用模板驱动验证需要依赖于原生的HTML表单验证器 Angular 会用指令来匹配具有验证功能的这些属性. 原生的HTMl验证器主要分两种 通过语义类型来进行定义 通过验证相关的属性来进 ...
最新文章
- SpringBoot中的线程池,你真的会用么?
- Python 的运算符
- c语言 误差小于10 -6,上海理工大学C语言2011期中试题和答案
- mysql连接数紧张_Mysql 查看连接数,状态,最大并发数
- 迷宫求解无敌版(递归调用法)
- python字符串前面加f什么意思_Python 字符串前面加u,r,b,f的含义
- java jsonobject.parse_JSON.parseObject的几种用法
- 地磅称重软件源码_【漯河衡器】导致地磅称重不准原因及处理措施
- 第四天的作业与答案,py直播
- 转载:jsonp详解
- 【2020-06-16】CentOS8下yum安装nginx,systemctl start nginx报错undefined symbol: FT_Done_MM_Var
- sql \n 查询_探索SQL查询提示选项(快速N)
- Python 之 循环
- Atitit 字符串转换数组main参数解析 args splitByWholeSeparator 	 		String string= -host 101.1 8*124 -db 1
- 海云捷迅让OpenStack从项目实施转为服务交付
- word三线格模版绘制
- 中央处理器(CPU)—— 控制器的功能和基本原理(微程序控制器(CU))
- java对象交换_如何在Java中交换或交换对象?
- 郸城二高2021年高考成绩查询,郸城几所高中高考成绩汇总!有你们村的没?
- 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】
热门文章
- [Java基础]异常概述与异常处理
- C++实现各种选择排序(简单选择排序,堆排序)
- C++set容器去重法
- [蓝桥杯][历届试题]九宫重排-双向bfs和map标记
- scp连接计算节点操作
- word 中同样的字号和行距倍数,不一样的行距
- 应用服务器——tomcat架构分析
- Codeforces Round #635 (Div. 2) D. Xenia and Colorful Gems 暴力 + 二分
- Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp
- P2498 [SDOI2012]拯救小云公主