转载自 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;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表单验证器的使用相关推荐

  1. SpringMVC 表单验证

    SpringMVC 表单验证 本章节内容很丰富,主要有基本的表单操作,数据的格式化,数据的校验,以及提示信息的国际化等实用技能. 首先看效果图 然后项目目录结构图 接下来用代码重点学习SpringMV ...

  2. Django 表单验证之自定义表单验证器

    本文基于Django 表单验证 一文,补充完善表单验证器之自定义表单验证器 具体步骤总结如下: 第一:在formValidation.py 文件中,添加自定义名称敏感验证器(NameValidatio ...

  3. SpringMVC表单验证与Velocity整合

    阅读本文约"1.2分钟" 定义表单类 以Login为例,有username和password两个字段 import javax.validation.constraints.Not ...

  4. 如何优雅的使用 Angular 表单验证

    随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...

  5. 真正简单的基于prototype的表单验证

    由 searchadmin 于 周二, 10/16/2007 - 06:44 提交. 真正简单的基于prototype的表单验证 tag:prototype 数据验证 表单验证 validator j ...

  6. Web框架——Flask系列之WTF表单验证练习(七)

    一.Web表单 web表单是web应用程序的基本功能. 它是HTML页面中负责数据采集的部件.表单有三个部分组成:表单标签.表单域.表单按钮.表单允许用户输入数据,负责HTML页面数据采集,通过表单将 ...

  7. angular js创建表单_如何优雅的使用 Angular 表单验证

    随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...

  8. 12个方便易用的jquery表单验证插件

    绝大部分网站都是开放注册的,而注册就需要使用表单验证,因为网站都需要对注册用户的信息安全性和合理性做出判断,表单的注册都应该具备完善的验证方式,比如注册使用的手机号是否是真实的?用户填写的验证码是否正 ...

  9. Angular 表单验证

    模板驱动验证 使用模板驱动验证需要依赖于原生的HTML表单验证器 Angular 会用指令来匹配具有验证功能的这些属性. 原生的HTMl验证器主要分两种 通过语义类型来进行定义 通过验证相关的属性来进 ...

最新文章

  1. SpringBoot中的线程池,你真的会用么?
  2. Python 的运算符
  3. c语言 误差小于10 -6,上海理工大学C语言2011期中试题和答案
  4. mysql连接数紧张_Mysql 查看连接数,状态,最大并发数
  5. 迷宫求解无敌版(递归调用法)
  6. python字符串前面加f什么意思_Python 字符串前面加u,r,b,f的含义
  7. java jsonobject.parse_JSON.parseObject的几种用法
  8. 地磅称重软件源码_【漯河衡器】导致地磅称重不准原因及处理措施
  9. 第四天的作业与答案,py直播
  10. 转载:jsonp详解
  11. 【2020-06-16】CentOS8下yum安装nginx,systemctl start nginx报错undefined symbol: FT_Done_MM_Var
  12. sql \n 查询_探索SQL查询提示选项(快速N)
  13. Python 之 循环
  14. Atitit 字符串转换数组main参数解析 args splitByWholeSeparator String string= -host 101.1 8*124 -db 1
  15. 海云捷迅让OpenStack从项目实施转为服务交付
  16. word三线格模版绘制
  17. 中央处理器(CPU)—— 控制器的功能和基本原理(微程序控制器(CU))
  18. java对象交换_如何在Java中交换或交换对象?
  19. 郸城二高2021年高考成绩查询,郸城几所高中高考成绩汇总!有你们村的没?
  20. 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】

热门文章

  1. [Java基础]异常概述与异常处理
  2. C++实现各种选择排序(简单选择排序,堆排序)
  3. C++set容器去重法
  4. [蓝桥杯][历届试题]九宫重排-双向bfs和map标记
  5. scp连接计算节点操作
  6. word 中同样的字号和行距倍数,不一样的行距
  7. 应用服务器——tomcat架构分析
  8. Codeforces Round #635 (Div. 2) D. Xenia and Colorful Gems 暴力 + 二分
  9. Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp
  10. P2498 [SDOI2012]拯救小云公主