【Spring-IOC】Spring中的数据校验
数据校验模块在spring的指导手册中的第三个标题项。
先试验下给的例子:
校验器:
public class PersonValidator implements Validator {@Overridepublic boolean supports(Class<?> clazz) {return clazz.equals(Person.class);}@Overridepublic void validate(Object target, Errors errors) {Person person = (Person) target;if (person.getAge() > 12) {errors.rejectValue("age", "age >12");}if (person.getName().length() < 5) {errors.rejectValue("name", "name length <5");}}
}
校验代码:
Person person = new Person();person.setName("12");person.setAge(23);PersonValidator validator = new PersonValidator();BeanPropertyBindingResult result = new BeanPropertyBindingResult(person, "person");validator.validate(person, result);List<ObjectError> allErrors = result.getAllErrors();for (ObjectError error : allErrors) {FieldError fieldError = (FieldError)error;System.out.println(fieldError.getField()+" " + fieldError.getCode());}
逻辑就是通过PersonValidator的validate方法校验,如果有问题,就将错误封装在BeanPropertyBindingResult中,validate方法的第二个参数是一个Errors 类型,我这里选用了BeanPropertyBindingResult实现类;也可以用其他的;
数据校验是有个JSR标准的。熟悉是有hibernate-validator,如果想用这个怎么办呢?
首先引入第三方的实现(pom),容器中注入:CustomValidatorBean。
public void afterPropertiesSet() {if (this.validatorFactory == null) {//自动加载第三方实现this.validatorFactory = Validation.buildDefaultValidatorFactory();}ValidatorContext validatorContext = this.validatorFactory.usingContext();MessageInterpolator targetInterpolator = this.messageInterpolator;if (targetInterpolator == null) {targetInterpolator = this.validatorFactory.getMessageInterpolator();}validatorContext.messageInterpolator(new LocaleContextMessageInterpolator(targetInterpolator));if (this.traversableResolver != null) {validatorContext.traversableResolver(this.traversableResolver);}setTargetValidator(validatorContext.getValidator());}
校验时,注入这个bean,直接校验即可:
// 调用validateValue方法。Set<ConstraintViolation<Person>> constraintViolations = validator.validateValue(Person.class, "name", "tom");for (ConstraintViolation<Person> cv : constraintViolations) {System.out.println(cv.getMessage());}
第三方的实现不仅可以校验值,还可以校验返回值,方法参数等。调用对应的方法就可以了。
【Spring-IOC】Spring中的数据校验相关推荐
- 头条一面:Spring IOC容器中只存放单例Bean吗?
最近,很多小伙伴出去面试,感觉自己面的不是很理想,回来后,不少小伙伴把面试题做了记录发给我,让我给大家解析下,然后发出来.当我看到这些面试题时,快速在脑海中构建起了整个知识体系,从基础到框架.从分布式 ...
- java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?
前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...
- SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)
微信公众号:吉姆餐厅ak 学习更多源码知识,欢迎关注. SpringBoot2 | SpringBoot启动流程源码分析(一) SpringBoot2 | SpringBoot启动流程源码分析(二) ...
- java 护照校验,Java应用中的数据校验
翻译:叩丁狼教育吴嘉俊 [译者注:这篇文章是开源项目CUBA Platform的作者,在这篇文章中,作者阐述了CUBA平台中关于数据校验的设计思想和使用方式,可以作为大家在设计数据校验方面一个比较好的 ...
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...
- 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式
每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...
- SilverlightMVVM模式中的数据校验
silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...
- 关于Ext中EditorGridPanel数据校验
用了2年的Ext 渐渐对Ext熟络起来,经常去看下源码,自己瞎琢磨些功能,最近做了个EditorGridPanel数据校验,原理不难,不过绝对原创,有点意思,发下和大家分享~ 原理:通过EditorG ...
- SpringBoot中后端数据校验
文章目录 1.为什么后端要进行数据校验? 2.怎么使用数据校验?(要添加对应依赖) 实现对手机号码的数据校验: 入参对象包含集合时,怎么对集合中的每个属性进行校验 1.为什么后端要进行数据校验? 如果 ...
- elementui表单校验原始密码_javascript 中入门数据校验
1.onSubmit 放在表单中,返回false为不提交 ,所以 放一个函数在里面所有的 数据获取,数据判断:都在内:(把一个value放到一个值,和另一个value值比对): 2.获取提交的数据 , ...
最新文章
- robot framework安装问题排查
- 《深入理解java虚拟机》
- *13.图的存储方式
- PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射
- openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)
- 推荐一款github管理神器SourceTree
- 华润网络签约神策数据 数据赋能打造跨行业综合移动服务生态圈
- C语言面试题分享(2)
- python numpy矩阵索引_Numpy中的矩阵索引
- python动态绘图并保留之前绘图_[转]基于Python实现matplotlib中动态更新图片(交互式绘图)...
- 使用详解_Log4j2使用详解
- Mysql Linux安装详细步骤
- java全栈工程师简历,全栈工程师:全栈JavaScript简介
- 如何解决stata数据管理器中变量变红的问题
- Mac数据图表软件|让你的论文数据更加直观漂亮
- 《惢客创业日记》2020.02.11-02.21(周二)惢客的三个发展阶段(下)
- K-折交叉验证(原理及实现)
- 英语单词记忆方法20种
- Python 爬虫基础 - Urllib 模块(1)
- FlexBoxlayout在项目的使用总结
热门文章
- html+表格+左侧表头,HTML多表头表格代码
- 贝叶斯概率推断:短信数据推断行为
- 机器学习- 吴恩达Andrew Ng - week3-2 Logistic Regression Model
- pymysql executemany()函数
- mysql索引表交换分区_MySQL交换分区的实例详解
- xmind快捷键_小冰笔记 | 请在XMIND里写下你的MIND!
- plot函数_激活函数-双曲正切函数tanh函数
- redis 编译/调试
- 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
- CSSG:Cobalt Strike Shellcode生成工具