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中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 -> 数据验证. ...
随机推荐
- 2018-2019-2 20165315《网络对抗技术》Exp9 Web安全基础
2018-2019-2 20165315<网络对抗技术>Exp9 Web安全基础 目录 一.实验内容 二.实验步骤 1.Webgoat前期准备 2.SQL注入攻击 Command Inje ...
- Qt SDK Issue cstdlib: fatal error: stdlib.h: No such file or directory
*To reproduce the issue, I've tried the following solutions which did not help:* *1) Globally remove ...
- spring cloud 服务容错保护 - Hystrix
1.为什么要断路器 在微服务架构中通常会涉及到多个服务间调用,处于调用链路底层的基础服务故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供 ...
- Java练习——扑克牌发牌器
Java练习——扑克牌发牌器声明:学习自其他博主,感谢分享,这里自己也写了一下.实现思路 - 构建一张扑克牌 - 构建一套扑克牌 - 测试 构建一张扑克牌 /** * @author 冬冬 * 定义 ...
- golang 学习笔记 --基本类型
字符串值表示了一个一个字符值的集合,在底层,一个字符串值即一个包含了若干字节的序列,长度为0的序列与一个空字符串对应.字符串的长度即底层字节列中字节的个数. 字符串值是不可变的,对字符串的操作只会返回 ...
- 使用位运算实现int32位 整数的加减乘除
我觉得比较难想的是加法吧. 首先加法,脑海中脑补二进制加法,相同位相加,超过2 ,则进1,留0 那么用位运算怎么实现呢?其实理解了异或和与操作,就很容易想出来了. 我觉得异或操作和与操作完全就是实现加 ...
- C# SQl通过对视图数据二次查询,统计数据
问题描述: 原数据---------需要在原视图数据中,统计出每个Device_Num设备号下面的交易的总额和分别统计出微信支付宝的交易总额. 解决:从上图数据没办法使用直接查询出要求的数据. .1. ...
- C#多线程解决程序卡顿问题
描述: 在 C# 中,System.Threading.Thread 类用于线程的工作.它允许创建并访问多线程应用程序中的单个线程.进程中第一个被执行的线程称为主线程. 案例: static void ...
- WebAPI中路由参数中包含字符-点“.”
请求url都是类似:/api/area/province.list 我们默认建立的Asp Net WebApi 服务时,如果请求url包含“.”,则返回404错误. 解决办法:需要在web.confi ...
- C#汉字转为Unicode编码
主要用于生成json格式时,将汉字转成Unicoude编码,防止页面乱码. protected string GetUnicode(string text) { string result = &qu ...