SpringMVC使用@Valid注解进行数据验证
SpringMVC使用@Valid注解进行数据验证
我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验。好在SpringMVC在后台验证给我们提供了一个比较好的支持。那就是使用Valid接口的实现类做数据校验。在这之前我们先做一下准备的工作。
添加相关的Maven依赖
- <dependency>
- <groupId>javax.validation</groupId>
- <artifactId>validation-api</artifactId>
- <version>1.1.0.Final</version>
- </dependency>
- <dependency>
- <groupId>org.apache.bval</groupId>
- <artifactId>bval-jsr303</artifactId>
- <version>0.5</version>
- </dependency>
实现Validator接口
- package com.zkn.learnspringmvc.validtor;
- import com.zkn.learnspringmvc.scope.PersonScope;
- import org.springframework.util.StringUtils;
- import org.springframework.validation.Errors;
- import org.springframework.validation.ValidationUtils;
- import org.springframework.validation.Validator;
- /**
- * Created by wb-zhangkenan on 2016/9/2.
- */
- public class PersonalValidtor implements Validator{
- /**
- * 判断支持的JavaBean类型
- * @param aClass
- * @return
- */
- @Override
- public boolean supports(Class<?> aClass) {
- return PersonScope.class.equals(aClass);
- }
- /**
- * 实现Validator中的validate接口
- * @param obj
- * @param errors
- */
- @Override
- public void validate(Object obj, Errors errors) {
- //把校验信息注册到Error的实现类里
- ValidationUtils.rejectIfEmpty(errors,"name",null,"姓名不能为空!");
- PersonScope personScope = (PersonScope) obj;
- if(StringUtils.isEmpty(personScope.getAddress())){
- errors.rejectValue("address",null,"家庭地址不能为空!!!!");
- }
- }
- }
使用Validtor的校验实现类
- //绑定PersonalValidator
- @InitBinder
- public void initBinder(WebDataBinder webDataBinder){
- webDataBinder.addValidators(new PersonalValidtor());
- }
接下来我们需要在@RequestMapping这个注解所在的方法上使用@Valid注解进行数据的校验。
- @RequestMapping(value = "testPersonalValidtor.do")
- @ResponseBody
- //直接返回对象
- public Object testPersonalValidtor(@Valid PersonScope personScope, BindingResult bindingResult){
- if(bindingResult.hasErrors()){
- StringBuffer sb = new StringBuffer();
- for(ObjectError objectError : bindingResult.getAllErrors()){
- sb.append(((FieldError)objectError).getField() +" : ").append(objectError.getDefaultMessage());
- }
- return sb.toString();
- }else{
- return personScope;
- }
- }
接下来我们来看一下效果:
SpringMVC使用@Valid注解进行数据验证的更多相关文章
- SpringMVC数据验证
SpringMVC数据验证——第七章 注解式控制器的数据验证.类型转换及格式化——跟着开涛学SpringMVC 资源来自:http://jinnianshilongnian.iteye.com/blo ...
- spring(7)--注解式控制器的数据验证、类型转换及格式化
7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用Proper ...
- SpringMVC配置数据验证(JSR-303)
这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...
- Spring MVC 使用介绍(十三)数据验证 (一)基本介绍
一.消息处理功能 Spring提供MessageSource接口用于提供消息处理功能: public interface MessageSource { String getMessage(Strin ...
- 06springMVC数据验证
u 声明式数据验证 u 内置的验证约束和注解 u 错误消息 u 功能处理方法上多个验证参数的处理 u 异常处理的支持 1 声明式数据验证 Spring3开始支持JSR-303验证框 ...
- springMVC数据验证出现404错误解决办法
今天使用springMVC的数据验证的时候,看似很简单的东西,却有一个很大的陷阱:提交空表单的时候总是出现404错误,但是后台却不给你报任何错.遇到这个错误这个很苦恼,搞了几小时,今天记录并分享一下解 ...
- SpringMVC数据验证(AOP处理Errors和方法验证)
什么是JSR303? JSR 303 – Bean Validation 是一个数据验证的规范,2009 年 11 月确定最终方案. Hibernate Validator 是 Bean Valida ...
- SpringMVC学习笔记六:使用 hibernate-validator注解式数据校验
对客户端传过来的参数,在使用前一般需要进行校验. SpringMVC框架内置了Validator验证接口,但是实现起来太麻烦.我们一般使用 hibernate-validator进行数据校验. 1:j ...
- SpringMVC(6)数据验证
在系列SpringMVC(4)数据绑定-1.SpringMVC(5)数据绑定-2中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. ...
随机推荐
- SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)
一.相关文档 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能. 文档地址: 整体介绍文档:https://docs.microsoft.com/en-us/ ...
- centos7.2上安装CDH5.16.2及Spark2【原创】
背景:我自己的电脑配置太低,想在centos操作系统上安装CDH5.1.2并配置集群,我去阿里云上买了3台按流量计费的阿里云服务器. 大家一定要注意,配置,购买的阿里云服务器不要太低了.建议:3台2核 ...
- 如何下载最新版本和旧版本的eclipse?
1.进入官网,点击download,进入download界面,如果想要最新的版本的eclipse,直接点击下载即可,如图所示: 2.如果想下载旧版本的eclipse的话,可以点击上图的的downloa ...
- [转帖]如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 ---暂时未做实验.
如何获得一个RAC Oracle数据库(从Github - oracle/docker-images) - 本地版 2019-11-09 16:35:30 dingdingfish 阅读数 32更多 ...
- 使用springboot mybatis 查询时实体类中的驼峰字段值为null
看到返回结果以后主要分析了一下情况: 实体类的get.set方法确实 mapper.xml文件中的resultMap.resultType等原因导致 数据库中数据存在问题 经过检查与验证发现以上都不存 ...
- Gitbook常用命令
npm install gitbook-cli -g gitbook ls :列出本地安装版本: gitbook current :列出当前使用版本: gitbook ls-remote :列出远程可 ...
- 基于 DNS 动态发现方式部署 Etcd 集群
使用discovery的方式来搭建etcd集群方式有两种:etcd discovery和DNS discovery.在 「基于已有集群动态发现方式部署etcd集群」一文中讲解了etcd discove ...
- intellij idea 修改背景保护色&&修改字体&&快捷键大全
intellij idea 修改背景保护色&&修改字体&&快捷键大全 原创 2013年11月22日 18:00:07 90176 最近Idea比较流行,Eclipse因 ...
- Linux下快速安装Python3和pip
如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 一.安装p ...
- 读《计算机系统要素:从零开始构建现代计算机》的思考:CodeGen
掌握目标语言的使用.编写 是非常重要的!!! 如果你要实现的Jack语言编译器是把Jack语言代码编译成虚拟机VM代码.或者直接成汇编代码,要完成源代码中unit A——> 目标语言代码转写此u ...