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 月份开始在新模 ...
随机推荐
- npm安装教程[转载的,版权归原作者]
详情在里面:https://www.cnblogs.com/lgx5/p/10732016.html 详情二:https://www.cnblogs.com/lolDragon/p/6268345.h ...
- ubuntu安装supervisor以及使用supervisor启动.net core进程
1.下载.net core项目ubuntu系统运行容器dotnet 1.版本:dotnet-sdk-2.1.3-linux-x64.tar.gz 2.将下载好的包上传到ubuntu ...
- 【JAVA】eclipse-使用入门及常用快捷键
目录 下载与安装 HelloWorld 新建项目 视图与视窗 快捷键 个性化设置 导入项目 jar包 下载与安装 下载 网址:官网下载 注意: 下载javaee版 注意与本机的java环境相匹配,32 ...
- 【学习总结】认识MVC
参考链接: 菜鸟教程-MVC模式 CSDN:浅谈MVC架构-你到底有什么本事 目录: 一.什么是MVC 1.概念 MVC全名是Model View Controller,是模型(model)-视图(v ...
- Java集合、IO流、线程知识
一.集合: 1. 集合框架: 1)Collection (1)List:有序的,有索引,元素可重复. (add(index, element).add(index, Collection).remov ...
- tensorflow实现一个神经网络简单CNN网络
本例子用到了minst数据库,通过训练CNN网络,实现手写数字的预测. 首先先把数据集读取到程序中(MNIST数据集大约12MB,如果没在文件夹中找到就会自动下载): mnist = input_da ...
- spring cloud学习笔记四 熔断器Hystrix
我们知道分布式服务有这样一个特点,每一个微服务都有自己的业务,并且很多时候一个微服务的业务要依赖于其他微服务,如果这些相互关联的微服务中其中某个微服务请求失败时,就会导致其他调用它的微服务也会请求失败 ...
- Matlab中利用null函数解齐次线性方程组
摘自:http://blog.csdn.net/masibuaa/article/details/8119032 有齐次线性方程AX=0,且rank(A)=r<n时,该方程有无穷多个解, 可以用 ...
- Linux系统下安装JDK及环境配置
第一种属于傻瓜式安装,一键安装即可(yum安装): 第二种手动安装,需要自己去Oracle官网下载需要的jdk版本(需官网注册登录才可以下载),然后解压并配置环境. 一.yum一键安装1.首先执行以下 ...
- $emit 和 $on 进行平行组件之间的传值
效果图: 注:$emit 和 $on 的事件必须在一个公共的实例上,才能够触发: $emit 触发 $on 接收 需求: 1.有A.B.C三个组件,同时挂载到入口组件中: 2.将A组件中的数据传递到C ...