1. 程式人生 > >nnotation-driven

nnotation-driven

seq form 指定 當前時間 最小值 actor size lmin digi

<mvc:annotation-driven /> 會自註冊RequestMappingHandlerMappingRequestMappingHandlerAdapter 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 註解的表/命令象前註一個@ValidSpring 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(存儲的是數字)子類型

[email protected]

@Max(value=值)

[email protected]

[email protected]

@DecimalMin(value=值)

[email protected]

驗證註解的元素值大於等於@ DecimalMin指定的value值

@DecimalMax(value=值)

[email protected]

驗證註解的元素值小於等於@ DecimalMax指定的value值

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

[email protected]

驗證註解的元素值的整數位數和小數位數上限

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

字符串、Collection、Map、數組等

驗證註解的元素值的在min和max(包含)指定區間之內,如字符長度、集合大小

@Past

java.util.Date,

java.util.Calendar;

Joda Time類庫的日期類型

驗證註解的元素值(日期類型)比當前時間早

@Future

[email protected]

驗證註解的元素值(日期類型)比當前時間晚

@NotBlank

CharSequence子類型

驗證註解的元素值不為空(不為null、去除首位空格後長度為0),[email protected],@[email protected]首位空格

@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

任何非原子類型

指定遞歸驗證關聯的對象;

如用戶對象中有個地址對象屬性,如果想在驗證用戶對象時一起驗證地址對象的話,[email protected]

nnotation-driven