這篇文章帶給大家的內容是關於SpringMVC的類型轉換及驗證方法介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
Spring mvc 資料綁定流程:
#SpringMvc將ServletRequest物件及目標方法的形參實例傳給WebDataBinderFactory實例,以建立DataBinder實例物件。 DataBinder呼叫組裝在SpringMvc上下文中的ConversionService元件進行類型轉換和資料格式化工作,將Servlet請求資訊填入形參物件中。呼叫Validator主鍵對已經綁定了請求資訊的形參物件精選資料有效性驗證,並最終產生資料綁定結果BindingData物件。 SpringMVC抽取BindingResult中的形參對象和校驗錯誤對象,將他們賦給處理方法的相應參數
我們查看源代碼可以看到,透過WebDataBinderFactory創建DataBinder對象
自訂類型轉換器
當我們碰到一些特殊場合,有可能需要我們自己定義型別轉換器。下麥呢來講解一個自訂類型轉器,將字串轉換成emp對象,當頁面無法完成資料綁定或類型轉換時,springmvc會拋出異常,異常資訊可以使用BindingResult來進行取得。
Spring定義了三種類型的轉換器接口,實作任意一個轉換器接口都可以作為自訂轉換器註冊到ConversionServiceFactoryBean中。
Convertre:將S型別轉換為T型別。
ConverterFactory:將相同系類的多個「同質」Converter封裝在一起,如果希望一種類型轉換成另一種類型以及子類物件(例如String轉換成Number以Number的子類),可以使用該轉換器
GenericConverter:會根據來源類別物件以及目標類別物件所在的宿主類別中的上下文資訊精選類型轉換。
package com.spring.mvc.controller; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; @Component public class UserConverter implements Converter<String, User>{ @Override public User convert(String source) { System.out.println(source); String users [] = source.split("-"); User user = new User(); user.setUno(Integer.valueOf(users[0])); user.setUsername(users[1]); user.setUserpass(users[2]); return user; } }
ConversionService時SpringMVC中類型轉換器的核心接口,要添加自定義類型轉換器,需要實現該接口/利用ConversionServiceFactoryBean在Spring的IOC容器中第一一個ConversionService,並在Bean屬性配置對於的類型轉換器的實作類,SpringMvc處理方法的形參綁定時就會自動呼叫該類型轉換器。
<!--将非mapping配置下的请求交给默认的Servlet来处理 --> <mvc:default-servlet-handler /> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="userConverter" /> </set> </property> </bean> <!-- 注册类型转换器 --> <mvc:annotation-driven conversion-service="conversionService" />
在實際的開發同需要配置:
資料格式化
#對屬性的輸入/輸出格式化,其本質來講仍屬於型別轉換的範疇。 Spring在格式化模組中定義一個實作ConversionService介面的FarmattingConversionService實作類別,該實作類別擴充了GenericConversionService,因此它既具有型別轉換的功能具有具有格式化的功能。 FormattingConversionService擁有一個FormattingConversionServiceFactoryBean工廠類,後者用於建構前者。我們要註冊這個
<mvc:annotation-driven conversion-service="FormattingConversionServiceFactoryBean" />
JSR303
jsr303時java為bean資料合法性校驗提供的標準框架,它已經包含在JavaEE6.0中,JSR303通過在Bean屬性上標註類似@NotNull,@Max等標準的資料指定驗證規則,並透過標註的驗證介面對Bean進行驗證。
@NotEmpty @NotNull private String name; @NotNull @NotEmpty private String age; @NotNull @NotEmpty @Email private String email;
我們在前台使用SpringMVC提供的Form標籤使用Form:errors path 綁定屬性即可
@RequestMapping(value="/student",method=RequestMethod.POST) public String add(@Valid()Student student,BindingResult result){ if (!result.hasErrors()) {//判断是否有格式转换错误或者其他校验没通过 userService.addStudent(student); return "redirect:list"; }else return "addPage"; }
SpringMvc提示訊息國際化
<!-- 注册国际化信息,必须有id,指定资源文件名称,资源文件在src目录下 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="message"></property> </bean>
以上是SpringMVC的型別轉換及驗證方法介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!