SpringMVC使用@Valid注解进行数据验证
SpringMVC使用@Valid注解进行数据验证
我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验。好在SpringMVC在后台验证给我们提供了一个比较好的支持。那就是使用Valid接口的实现类做数据校验。在这之前我们先做一下准备的工作。
添加相关的Maven依赖
我们先把需要的jar包添加进来。
-
<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接口
接下来的第一 步我们需要写一个类来实现Validator接口。在这个类里我们需要定义它支持校验的JavaBean,实现validate方法,用来进行相关的校验。具体的实现类如下:
-
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
-
*/
-
-
public boolean supports(Class<?> aClass) {
-
return PersonScope.class.equals(aClass);
-
}
-
-
/**
-
* 实现Validator中的validate接口
-
* @param obj
-
* @param errors
-
*/
-
-
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的校验实现类
我们需要在Controller的类里使用刚才写的Validtor的校验实现类来进行表单数据的校验。我们需要在Controller里用@InitBinder注解把刚才的校验类绑定到WebDataBinder类里。写法如下:
-
//绑定PersonalValidator
-
-
public void initBinder(WebDataBinder webDataBinder){
-
webDataBinder.addValidators(new PersonalValidtor());
-
}
-
-
-
//直接返回对象
-
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;
-
}
-
}
请求:http://localhost:8081/testPersonalValidtor.do
结果:

请求:http://localhost:8081/testPersonalValidtor.do?name=张三&address=三元桥
结果:
标签:
其他
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2017-10-11 技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构
2017-10-11 DNS隧道和工具
2017-10-11 “DNS隧道”盗号木马分析——类似hjack偷密码然后利用dns tunnel直传数据发送出去
2017-10-11 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案
2017-10-11 反弹木马——本质上就是一个开80端口的CS程序,伪造自己在浏览网页
2016-10-11 C++技能重拾2
2016-10-11 C++技能重拾