数据校验模块在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中的数据校验相关推荐

  1. 头条一面:Spring IOC容器中只存放单例Bean吗?

    最近,很多小伙伴出去面试,感觉自己面的不是很理想,回来后,不少小伙伴把面试题做了记录发给我,让我给大家解析下,然后发出来.当我看到这些面试题时,快速在脑海中构建起了整个知识体系,从基础到框架.从分布式 ...

  2. java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

    前面几篇文章主要分析了 Spring IoC 容器如何初始化,以及解析和注册我们定义的 bean 信息. 其中,「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述,「Sprin ...

  3. SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)

    微信公众号:吉姆餐厅ak 学习更多源码知识,欢迎关注. SpringBoot2 | SpringBoot启动流程源码分析(一) SpringBoot2 | SpringBoot启动流程源码分析(二) ...

  4. java 护照校验,Java应用中的数据校验

    翻译:叩丁狼教育吴嘉俊 [译者注:这篇文章是开源项目CUBA Platform的作者,在这篇文章中,作者阐述了CUBA平台中关于数据校验的设计思想和使用方式,可以作为大家在设计数据校验方面一个比较好的 ...

  5. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

  6. 【小家Spring】Spring注解驱动开发---向Spring Ioc容器中注册Bean的7种方式

    每篇一句 比你有钱的人一定会比你努力,而比你努力的人终有一天会比你有钱 前言 Spring是一个非常强大的反转控制(IOC)框架,以帮助分离项目组件之间的依赖关系.因此可以说Spring容器对Bean ...

  7. SilverlightMVVM模式中的数据校验

    silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...

  8. 关于Ext中EditorGridPanel数据校验

    用了2年的Ext 渐渐对Ext熟络起来,经常去看下源码,自己瞎琢磨些功能,最近做了个EditorGridPanel数据校验,原理不难,不过绝对原创,有点意思,发下和大家分享~ 原理:通过EditorG ...

  9. SpringBoot中后端数据校验

    文章目录 1.为什么后端要进行数据校验? 2.怎么使用数据校验?(要添加对应依赖) 实现对手机号码的数据校验: 入参对象包含集合时,怎么对集合中的每个属性进行校验 1.为什么后端要进行数据校验? 如果 ...

  10. elementui表单校验原始密码_javascript 中入门数据校验

    1.onSubmit 放在表单中,返回false为不提交 ,所以 放一个函数在里面所有的 数据获取,数据判断:都在内:(把一个value放到一个值,和另一个value值比对): 2.获取提交的数据 , ...

最新文章

  1. robot framework安装问题排查
  2. 《深入理解java虚拟机》
  3. *13.图的存储方式
  4. PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射
  5. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)
  6. 推荐一款github管理神器SourceTree
  7. 华润网络签约神策数据 数据赋能打造跨行业综合移动服务生态圈
  8. C语言面试题分享(2)
  9. python numpy矩阵索引_Numpy中的矩阵索引
  10. python动态绘图并保留之前绘图_[转]基于Python实现matplotlib中动态更新图片(交互式绘图)...
  11. 使用详解_Log4j2使用详解
  12. Mysql Linux安装详细步骤
  13. java全栈工程师简历,全栈工程师:全栈JavaScript简介
  14. 如何解决stata数据管理器中变量变红的问题
  15. Mac数据图表软件|让你的论文数据更加直观漂亮
  16. 《惢客创业日记》2020.02.11-02.21(周二)惢客的三个发展阶段(下)
  17. K-折交叉验证(原理及实现)
  18. 英语单词记忆方法20种
  19. Python 爬虫基础 - Urllib 模块(1)
  20. FlexBoxlayout在项目的使用总结

热门文章

  1. html+表格+左侧表头,HTML多表头表格代码
  2. 贝叶斯概率推断:短信数据推断行为
  3. 机器学习- 吴恩达Andrew Ng - week3-2 Logistic Regression Model
  4. pymysql executemany()函数
  5. mysql索引表交换分区_MySQL交换分区的实例详解
  6. xmind快捷键_小冰笔记 | 请在XMIND里写下你的MIND!
  7. plot函数_激活函数-双曲正切函数tanh函数
  8. redis 编译/调试
  9. 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
  10. CSSG:Cobalt Strike Shellcode生成工具