Spring mvc資料轉換與格式化
Spring mvc資料繫結
spring mvc通過反射機制對目標方法的簽名進行分析,將請求訊息繫結到處理方法入參中。
資料繫結的核心部件是DataBinder。
spring mvc主框架將servletRequest物件及處理方法入參物件例項傳遞給DataBinder,DataBinder呼叫裝配在spring mvc上下文中的ConversionService元件進行資料型別轉換,資料格式化的工作,將servletRequest中的訊息填充到入參物件中,然後再呼叫Validator元件對已綁定了請求訊息資料的入參物件進行資料合法性檢驗,並最終生成資料繫結結果BindingResult物件,BindingResult包含了已完成資料繫結的入參物件,還包含相應的校驗錯誤物件。
資料轉換
conversionService是spring型別轉換體系的核心介面,位於org.springframework.core.convert包中,可以利用org.springframework.context.support.ConversionServiceFactoryBean在spring上下文中定義一個ConversionSerivce。spring 自動識別出上下文中的ConversionService,並在Bean屬性配置及springmvc處理方法入參繫結等場合使用它進行資料的轉換。
<bean id="conversionSerivce"
class="org.springframework.context.support.ConversionServiceFactoryBean"/>
該FactoryBean建立ConversionSerivce內建了很多轉換器,可通過該FactoryBean的convertors屬性註冊自定義的型別轉換器
<bean id="conversionSerivce"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<propertyname="converters">
<list>
<bean class="xxxxx"/>
</list>
</property>
</bean>
spring 內建3中型別轉換器介面,分別是
Converter<S,T>
ConverterFactory<S,R>
GenericConverter
自定義的型別轉換器必須實現其中一個
Converter
Converter介面是spring最簡單的轉換器介面,僅包含一個方法
public interface Converter<S,T>{
Tconverter(S source);//負責將S型別物件轉換成T型別物件
}
ConverterFactory<S,R>
ConverterFactory介面定義如下
public interface ConverFactory<S,R>{
<T,R>Converter<S,T> getConverter(Class<T> targetType);
}
S為源型別,R為目標型別的基類,T為擴充套件於R基類的型別。如spring的stringToNumberConverFactory就實現了ConverterFactory介面,封裝了String轉換成各種資料型別的Converter
在spring mvc中使用conversionSerivce
<userName>:<password>:<realName>-> User
1、<mvc:annotation-drivenconversion-service="conversionService"/>裝配自定義conversionService
<mvc:annotation-driven>該標籤可以簡化springmvc相關配置,預設情況下,它會建立並註冊一個預設的DefaultAnnotationHandlerMapping和一個AnnotationMethodHandlerAdapter,如果上下文中存在自定義的對應元件bean,spring mvc會自動利用自定義的bean覆蓋預設的,除此之外,<mvc:annotation-driven/>標籤還會註冊一個預設的ConversionService,即FormattingConversionServiceFactoryBean,由於要自定義converter,因此要顯示定義一個ConversionSerivce覆蓋預設的實現。
2、裝配自定義轉換器
<bean id="conversionSerivce"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<propertyname="converters">
<list>
<bean class="StringToUserConverter"/>
</list>
</property>
</bean>
3、編寫轉換器類
public class StringToUserConverter implementsConverter<String,User>{
publicUser convert(String source){
Useruser = new User();
if(source!=null){
Stringitems = source.split(“:”);
user.setUserName(items[0]);
user.setPassword(items[1]);
user.setRealName(items[2]);
}
}
}
@InitBinder
在控制器中使用@InitBinder新增自定義編輯器
@InitBinder
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor(User.class,newUserEditor());
}
spring mvc使用WebDataBinder處理請求訊息和處理方法入參的繫結工作,自定義編輯器必須實現PropertyEditor介面。
全域性範圍自定義編輯器
1、實現WebBindingInitalizer介面
public void initBinder(WebDataBinder binder,WebRequestrequest);
2、在web上下文中通過AnnotationMethodHandlerAdapter裝配
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<propertyname="webBindingInitializer">
<bean class="xxx"/>
</property>
</bean>
spring mvc將按以下順序查詢型別轉換編輯器
@InitBinder->ConversionService->WebBindingInitializer
資料格式化
spring 使用轉換器進行源型別物件到目標型別物件的轉換,spring 轉換器並不提供輸入輸出資訊格式化工作。
註解驅動格式化
註解驅動重要介面
spring在org.springframework.format包中提供了一個
AnnotationFormatterFactory<A extends Annotation>介面,介面方法如下:
Set<Class<?>> getFieldTypes():表示哪些類可以標註A註解
Parser<?> getParser(A annotation,Class<?>fieldType):根據註解A獲取特定型別的Parser
Printer<?> getPrinter(Aannotation,Class<?> fieldType):根據註解A獲取特定型別的Printer
spring提供2個內建實現類,分別支援陣列及數字型別的註解驅動格式化
NumberFormatAnnotationFormatterFactoryBean:支援數字型別的屬性使用(@NumberFormat)
JodaDateTimeFormatAnnotationFormatFactoryBean:用於日期型別(@DateTimeFormat)
啟用註解驅動格式化功能
spring中定義了一個實現了ConversionSerivce實現類FormattingConversionService,該類擴充套件於GenericConversionService,它既有型別轉換功能也有格式化功能。
FormattingConversionService也擁有一個FormattingConversionServiceFactoryBean,後者用於在spring上下文中構造一個FormattingConversionSerivce,通過這個類即可以註冊自定義轉換器,還可以註冊自定義註解驅動邏輯。
NumberFormatAnnotationFormatterFactoryBean/JodaDateTimeFormatAnnotationFormatFactory
會自動註冊到FormattingConversionServiceFactoryBean中,因此裝配該FactoryBean後,就可以在入參繫結及模型資料輸出使用註解驅動格式化功能。
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<propertyname="converters">
<list><bean class="xxxx"/></list>
</property>
</bean>
用FormattingConversionServiceFactoryBean替換原來的ConversionServiceFactoryBean
<mvc:annotation-driven/>標籤預設建立了FormattingConversionServiceFactoryBean
@DateTimeFormat
可以對java.util.Date,java.util.Calendar,java.lang.Long,joda時間型別屬性標註
@DateTimeFormat(partten=”yyyy-MM-dd”)
@NumberFormat可對數字型別屬性標註
@NumberFormat(pattern=”#,###.##”)
相關推薦
Spring mvc資料轉換與格式化
Spring mvc資料繫結 spring mvc通過反射機制對目標方法的簽名進行分析,將請求訊息繫結到處理方法入參中。 資料繫結的核心部件是DataBinder。 spring mvc主框架將servletRequest物件及處理方法入參物件例項傳遞給DataBinde
Spring MVC的配置與DispatcherServlet的分析
圖層 res 原理 success ota 靜態 source property dha Spring MVC是一款Web MVC框架,是目前主流的Web MVC框架之一。 Spring MVC工作原理簡單來看如下圖所示: 接下來進行Spring MV
Spring MVC 資料繫結和表單標籤庫
資料繫結是將使用者輸入繫結到領域模型的一種特性。 資料繫結的好處: 1. 型別總是為 String 的 HTTP 請求引數,可用於填充不同型別的物件屬性。 2. 當輸入驗證失敗時,會重新生成一個 HTML 表單。 為了高效的使用資料繫結,還需要 Spring 的表單標籤庫。表單標籤庫中包含了可以用在
Spring MVC 資料繫結流程分析
1. 資料繫結流程原理★ ① Spring MVC 主框架將 ServletRequest 物件及目標方法的入參例項傳遞給 WebDataBinderFactory 例項,以建立 DataBinder 例項物件 ②
SpringMVC的資料轉換、格式化和資料校驗
目錄 5.案例 一、資料轉換 Spring MVC 上下文中內建了很多轉換器,可完成大多數 Java 型別的轉換工作。 1.ConversionService ConversionServ
Spring MVC 資料校驗
資料校驗是 Web 應用必須處理的內容,Spring MVC 提供了兩種方法來對使用者的輸入資料進行校驗,一種是 Spring 自帶的 Validation 校驗框架,另一種是利用 JRS-303 驗證框架進行驗證。 Hibernate-Validator 實
Spring MVC---資料繫結和表單標籤
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transi
Spring MVC:原理與使用
本人上一篇博文提到了Spring的注入功能,這樣在存在物件依賴(具體意思可見上一篇博文)的時候就不用自己生成一個物件了,特別是對於較多的無狀態物件的時候,這個特別方便,加上Spring提供的用xml配置檔案和程式碼註解兩種方式,使得使用更加靈活。然而spring的功能遠不止
spring MVC連結資料庫與JDBC連線資料庫
本文討論的是對mysql的連線操作 1.在開發環境中載入指定資料庫的驅動程式: JDBC:下載mysql支援jdbc的驅動程式,例:mysql-connector-java-5.1.18-bin.jar,將該驅動程式載入到開發程式中去。 spring mvc:在POM配置檔
spring MVC 返回值與jsp中獲取值
1,ModleAndView@RequestMapping(value="/getUser.do") public ModelAndView getUser(){ User user= new User(); ModelAndView
Spring MVC 資料驗證——validate編碼方式
1、匯入jar包 其他的就是一些日誌包(不一定全不需要):jboss-logging-3.1.3.GA.jar、slf4j-log4j12-1.6.1.jar 2、web專案的結構圖 3、專案配置 web.xml配置 Spring m
讓spring mvc controller轉換date型別
在controller加入下面程式碼 @InitBinder public void bindingPreparation(WebDataBinder binder) { DateFormat dateFormat = n
spring mvc 資料繫結 400錯誤
情景:使用在方法中繫結資料的時候,開啟連結,出現400錯誤。 @RequestMapping(value = "editItemSubmit") public String editItemSubmit(int id, Items item) {
js獲取後臺Spring MVC資料
後臺Controller: @HtmlTitle(title = "Statistic") @RequestMapping("/statistic") public String statistic(Model model){ List&l
spring mvc 資料繫結問題 提交表單提示HTTP status 400, The request sent by the client was syntactically incorrect
我們在spring mvc 中controller方法中的引數,spring mvc會自動為我們進行資料繫結。 spring mvc 方法中不一定要全部都有 form表單提交的屬性, 也可以有 請求屬性中 沒有的引數(這時候只會把對應不上的引數設為null),
Spring mvc json傳輸與獲取
一、測試: 1.測試用具:postman. 2.測試圖片: 資料獲取成功。 二、使用jar包與配置 1.pom依賴: ········<dependency> <groupId>com.fasterxml.jackson.c
Spring MVC(3):資料轉換 & 格式化
處理方法的資料繫結過程 Spring MVC 通過反射對目標處理方法簽名進行分析,見請求訊息繫結到處理方法的入參中,資料繫結的核心元件為 DataBinder; Spring MVC 資料繫結過程如下: Spring MVC 主框架將 ServletRequest
Spring mvc與form表單/json資料的互動
ajax非同步提交請求常用的contentType有兩種:contentType:application/x-www-form-urlencoded contentType:application/json,如何使用springmvc處理請求資料呢? 首先,我們來看一下js物件的兩種
Spring MVC使用fastjson做訊息轉換器,與預設Jackson的區別
spring mvc支援自定義HttpMessageConverter接收JSON格式的資料,使用fastjson作為訊息裝換器,只需要在spring的配置檔案中加入如下配置程式碼(需引入fast
Spring Mvc與Json資料互動
在web開發中,如果想做頁面區域性重新整理的功能,那麼使用ajax最合適不過了。在spring mvc逐漸替代struts框架的今天,掌握spring mvc和json的資料互動式很有必要的。 ajax與後臺的資料互動格式有好幾種,本文主要講解以ajax以js