nnotation-driven

<mvc:annotation-driven /> 会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter 与ExceptionHandlerExceptionResolver 三个bean。
? 还将提供以下支持:
– 支持使用 ConversionService 实例对表单参数进行类型转换
– 支持使用 @NumberFormat annotation、@DateTimeFormat注解完成数据类型的格式化
– 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
– 支持使用 @RequestBody 和 @ResponseBody 注解

Spring MVC 通过反射机制对目标处理方法进行解析,将请求消息绑定到处理方法的入参中。数据绑定的核心部件是DataBinder

数据绑定流程
? 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象
? 2. DataBinder 调用装配在 Spring MVC 上下文中的ConversionService 组件进行数据类型转换、数据格式化工作。将 Servlet 中的请求信息填充到入参对象中
? 3. 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果BindingData 对象
? 4. Spring MVC 抽取 BindingResult 中的入参对象和校验错误对象,将它们赋给处理方法的响应入参

@InitBinder
? 由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定
? @InitBinder方法不能有返回值,它必须声明为void。
? @InitBinder方法的参数通常是是 WebDataBinder

数据校验

<mvc:annotation-driven/> 会默认装配好一个LocalValidatorFactoryBean,通过在处理方法的入参上标注 @valid 注解即可让 Spring MVC 在完成数据绑定后执行数据校验的工作
? 在已经标注了 JSR303 注解的表单/命令对象前标注一个@Valid,Spring MVC 框架在将请求参数绑定到该入参对象后,就会调用校验框架根据注解声明的校验规则实施校验
? Spring MVC 是通过对处理方法签名的规约来保存校验结果的:前一个表单/命令对象的校验结果保存到随后的入参中,这个保存校验结果的入参必须是 BindingResult 或
Errors 类型,这两个类都位于org.springframework.validation 包中

Spring MVC 就会实施校验并将校验结果保存在被校验入参对象之后的 BindingResult 或Errors 入参中。
? 常用方法:
– FieldError getFieldError(String field)
– List<FieldError> getFieldErrors()
– Object getFieldValue(String field)
– Int getErrorCount()

内置的验证约束注解如下表所示(摘自hibernate validator reference):


验证注解


验证的数据类型


说明


@AssertFalse


Boolean,boolean


验证注解的元素值是false


@AssertTrue


Boolean,boolean


验证注解的元素值是true


@NotNull


任意类型


验证注解的元素值不是null


@Null


任意类型


验证注解的元素值是null


@Min(value=值)


BigDecimal,BigInteger, byte,

short, int, long,等任何Number或CharSequence(存储的是数字)子类型


验证注解的元素值大于等于@Min指定的value值


@Max(value=值)


和@Min要求一样


验证注解的元素值小于等于@Max指定的value值


@DecimalMin(value=值)


和@Min要求一样


验证注解的元素值大于等于@ DecimalMin指定的value值


@DecimalMax(value=值)


和@Min要求一样


验证注解的元素值小于等于@ DecimalMax指定的value值


@Digits(integer=整数位数, fraction=小数位数)


和@Min要求一样


验证注解的元素值的整数位数和小数位数上限


@Size(min=下限, max=上限)


字符串、Collection、Map、数组等


验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小


@Past


java.util.Date,

java.util.Calendar;

Joda Time类库的日期类型


验证注解的元素值(日期类型)比当前时间早


@Future


与@Past要求一样


验证注解的元素值(日期类型)比当前时间晚


@NotBlank


CharSequence子类型


验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的首位空格


@Length(min=下限, max=上限)


CharSequence子类型


验证注解的元素值长度在min和max区间内


@NotEmpty


CharSequence子类型、Collection、Map、数组


验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)


@Range(min=最小值, max=最大值)


BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子类型和包装类型


验证注解的元素值在最小值和最大值之间


@Email(regexp=正则表达式,

flag=标志的模式)


CharSequence子类型(如String)


验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式


@Pattern(regexp=正则表达式,

flag=标志的模式)


String,任何CharSequence的子类型


验证注解的元素值与指定的正则表达式匹配


@Valid


任何非原子类型


指定递归验证关联的对象;

如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证

时间: 2024-08-11 23:07:14

nnotation-driven的相关文章

论文笔记之:Deep Attributes Driven Multi-Camera Person Re-identification

Deep Attributes Driven Multi-Camera Person Re-identification 2017-06-28  21:38:55    [Motivation] 本文的网络设计主要分为三个部分: Stage 1: Fully-supervised dCNN training Stage 2: Fine-tuning using attributes triplet loss Stage 3:Final fine-tuning on the combined da

什么是领域驱动设计(Domain Driven Design)?

本文是从 What is Domain Driven Design? 这篇文章翻译而来. ”…在很多领域,专家的作用体现在他们的专业知识上而不是智力上.“ -- Don Reinertsen 领域驱动设计(Domain Driven Design)是一种软件开发方法,目的是让软件系统在实现时准确的基于对真实业务过程的建模并根据真实业务过程的调整而调整. 传统的开发工作趋向于一种以技术为先导的过程,需求从业务方传递到开发团队,开发人员依据需求上的描述创造出最有可能的假想. 在瀑布开发过程中,这导致

[Angular2 Form] Model Driven Form Custom Validator

In this tutorial we are going to learn how simple it is to create custom form field driven validators while using Angular 2 model driven forms. These type of validators are really just plain functions that follow a set of conventions. We are going to

Goal driven performance optimization

When your goal is to optimize application performance it is very important to understand what goal do you really have. If you do not have a good understanding of the goal your performance optimization effort may well still bring its results but you m

[Angular2 Form] Angular 2 Template Driven Form Custom Validator

In this tutorial we are going to learn how we can also implement custom form field validation in Angular 2 template driven forms, by creating our own custom validation directive. We are going to see how to write such directive and how its a best prac

【doc2vec】学习笔记:From word2vec to doc2vec: an approach driven by Chinese restaurant process

主要内容: 在google word2vec的基础上,考虑文章(document)的向量化方法,借鉴了随机过程中的Chinese restaurant process过程. Chinese restaurant process过程: 基本上的过程就是,餐馆中有无限多个桌子,每个桌子可以坐无限多个人.当第一位顾客过来的时候,直接开辟一张桌子坐下:当第n+1位顾客过来的时候,他有n/(n+1)的概率坐到前面n个人已经占据的桌子上,也有1/(n+1)的概率开辟一张新的桌子独自坐下.细节可以参考wiki

领域驱动设计(Domain Driven Design)参考架构详解

转自:http://blog.csdn.net/bluishglc/article/details/6681253 领域驱动设计(Domain Driven Design)参考架构详解 摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrastructure.本文会对架构中一些重要组件和问题进行讨论,给出一些分析结论.本文原文连接:http://blog.

Domain Driven Design and Development In Practice--转载

原文地址:http://www.infoq.com/articles/ddd-in-practice Background Domain Driven Design (DDD) is about mapping business domain concepts into software artifacts. Most of the writings and articles on this topic have been based on Eric Evans' book "Domain Dr

[转载]领域驱动设计(Domain Driven Design)参考架构详解

摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrastructure.本文会对架构中一些重要组件和问题进行讨论,给出一些分析结论.本文原文连接:http://blog.csdn.net/bluishglc/article/details/6681253 转载请注明出处! 目录 1.      架构概述2.      架构详解        2.1.  

Event Driven Architecture

在微服务中使用领域事件 稍微回想一下计算机硬件的工作原理我们便不难发现,整个计算机的工作过程其实就是一个对事件的处理过程.当你点击鼠标.敲击键盘或者插上U盘时,计算机便以中断的形式处理各种外部事件.在软件开发领域,事件驱动架构(Event Driven Architecture,EDA)早已被开发者用于各种实践,典型的应用场景比如浏览器对用户输入的处理.消息机制以及SOA.最近几年重新进入开发者视野的响应式编程(Reactive Programming)更是将事件作为该编程模型中的一等公民.可见