1. 程式人生 > >Spring mvc資料轉換與格式化

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 mvcform表單/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 MvcJson資料互動

在web開發中,如果想做頁面區域性重新整理的功能,那麼使用ajax最合適不過了。在spring mvc逐漸替代struts框架的今天,掌握spring mvc和json的資料互動式很有必要的。 ajax與後臺的資料互動格式有好幾種,本文主要講解以ajax以js