-
RESTful 風格的重點:
構成: 資源 -- 表現層 -- 狀態轉化
查看全部 -
RESTful 風格的GET、POST、PUT、DELET請求接口,常見以ID來標識某個資源,并通過查找 ID 來達到獲取目標資源或刪改某個數據的目的
查看全部 -
RESTful 狀態轉化 :
GET 、POST、PUT、DELETE 的特點查看全部 -
RESTful 表現層的內容<br/>查看全部
-
SpringMVC? 數據綁定的擴展性查看全部
-
springMVC查看全部
-
資源,表現層,狀態轉化
查看全部 -
同屬性多對象綁定
@InitBinder(“a”)
public void initA(WebDataBinder binder){
binder.setFieldDefaultPrefix("a.");
}
@InitBinder("b")
public void initB(WebDataBinder binder){
binder.setFieldDefaultPrefix("b.");
}
查看全部 -
本章主要介紹SpringMVC提供的PropertyEditor和自定義Formatter、Converter的使用場景、解決的實際的問題以及Formatter和Converter的簡單對比和選型依據
知識點1:
【a】PropertyEditor:屬性編輯器,一般用于類型轉換,它是一個接口,有很多實現類,常用直接下級實現類是PropertyEditorSupport,該類常用方法有。
setValue(Object value):一般自定義類型轉換器調用并傳入一個實體類對象。
getValue():一般通過自定義類型轉換器對象調用該方法就可以獲得實體類對象。
setAsText(String text):通常傳入一個字符串,并對該字符串進行解析,然后對實體類屬性進行賦值。
實現PropertyEdito接口時,通常不直接實現接口PropertyEditor,而是繼承PropertyEditorSupport類進行擴展。
案例:創建一個名為MyPropertyEditor的自定義類型轉換器,并繼承PropertyEditorSupport,這樣就可以使用接口PropertyEditor提供的方法,實現setAsText(String text)方法,該方法里創建User對象,并對傳進來的字符串用逗號分隔成字符串數組,把字符串數組第0個元素賦值給User對象的name,字符串數組的第1個元素賦值給User對象的age,再通過setValue(Object obj),把User對象傳入,這樣做的目的,就可以和前端約定,第一個字符在逗號前面的傳名字,第二個字符在逗號后面的傳年齡,這樣通過自定義的Editor就可以使用User對象進行接收。
擴展:getValue()方法源碼實現——它會返回一個Object對象,源碼中返回的是一個value屬性,而這個value就是PropertyEditorSupport的Object類型的屬性
【b】Formatter:格式化器,它是一個接口Formatter<T>,它繼承Printer<T>和Parser<T>,他有很多實現類(AbstractNumberFormatter、CurrencyFormatter貨幣轉換器、DateFormatter日期的轉換、InstanceFormatter、NumberFormatter、PercentFormatter百分比轉換器等),這里拿CurrencyFormatter講解(貨幣轉換器)(DateFormatter是做日期的格式化轉換器,PercentFormatter是做百分比的格式化轉換器)。
案例:創建自定義格式化類型轉化器FormatterTest
test1()方法中,創建CurrencyFormatter對象,該對象調用setFractionDigits(2),該方法是用來保留小數點后幾位的,該對象再調用setRoundingMode(RoundingMode.CEILING),該方法是用作舍入操作,celling表示四舍五入,接著通過Assert類的assertEquals()斷言方法,拿123.13和123.125進行斷言。
案例2:將BigDecimal("123")格式化為字符串"$123.00"展示,CurrencyFormatter的parse方法返回值是BigDecimal,print方法返回值是String。
【c】Converter:格式化器,它也是接口,該接口有兩個泛型Converter<S,T>(其中<S>是source的類型,<T>是target的類型),它的實現類很多,例如NumberToCharacterConverter,把數字轉換為字符,這里使用StringToBooleanConverter進行講解,它實現了Converter<String,Boolean>接口,而且修飾的類使用的是final修飾符而不是public,原因是防止該類被修改、被繼承,Converter接口不讓實現類進行擴展,而Formatter不一樣,它可以使用CurrentFormatter繼承Formatter接口的實現類AbstractNumberFormatter,可以進行擴展。
案例:首先在dispatcher-servlet.xml中把StringToBooleanConverter注入,然后再配置<mvc:annotation-driven conversion-service="stringToBooleanConverter"/>
總結:內置的CustomDateEditor(它繼承了PropertyEditorSupport),內置的CurrencyFormatter(它繼承了AbstractNumberFormatter),內置的StringToBooleanConverter(它實現了Converter<String,Boolean>),就擴展性來說,這里所說擴展性都是Spring內置擴展性,Converter不可擴展,PropertyEditor一般局部使用配合webdatabinder使用,Formatter全局局部都可以,全局是通過Spring注入的方式,局部就像單元測試那樣,new一個Formatter,然后調用它的方法,Converter全局和局部都可以,全局也是通過Spring注入的方式,局部也是自己實現Converter接口,寫一個實現,然后new這個實現類。
查看全部 -
SpringMVC——xml的數據綁定
案例:綁定xml數據類型,也是通過RequestBody數據區獲取xml數據
步驟1:該功能需要如下依賴,該包完成xml數據的序列化和反序列化功能。
步驟2:實體類中使用到兩個注解,分別為@XmlRootElement(name="admin")給類取別名和@XmlElement(name="name")用在屬性的get方法上,,如下圖
XML數據:
輸出:
查看全部 -
本章主要介紹Json、Xml的數據綁定以及坑
知識點1:SpringMVC——Json數據綁定
案例:Controller中方法參數為User類型對象,傳輸Json時,Json數據被放到RequestBody里,所以需要在User前+@RequestBody注解(它會把RequestBody數據區的內容反序列化為該參數的對象),這里使用DHC插件,該插件可以模擬各種請求,這里請求為POST,還需要把Content-Type,改成application/json如下圖
返回值:
JSON通過如下進行支持:也就是將JSON數據綁定到實體中
查看全部 -
SpringMVC的RESTful實現方式
【1】起源:REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的,他同時是apache基金會的第一人主席,HTTP1.0和HTTP1.1版本的設計者之一
【2】名稱:Fielding將他對互聯網軟件的架構原則,定名為REST,即Representational State Transfer(表現層、狀態、轉化)的縮寫,如果一個架構符合REST原則,就稱它為RESTful架構(完整全稱:Resource Representational State Transfer)。
【3】資源-Resource:例如一個文本、圖片、服務、音頻、網絡上的一個具體信息,可以通過統一資源定位符uri指向它。
【4】表現層-Representational:資源是一種信息實體,可以有多種的外在表現形式,資源的外在表現形式稱為Representational,即表現層,例如一個文本,它的表現形式可以有txt、html、xml、json、二進制,圖片的表現形式可以有jpg、png,uri代表實體資源的位置,并不代表表現形式,具體的表現形式通過http協議的content-type和accept這兩個字段進行描述。
案例:理解RESTful表現層——Representational
book是一個資源,通過http的content-type獲取不同的格式
【5】狀態轉化
【6】設計
查看全部 -
PropertyEditor的應用
案例:Controller中有個方法,并且該方法的參數為Date類型。如下圖,此時如果直接通過url傳入日期數據,會報400錯誤,說明參數是有問題的。
CustomDateEditor類:MVC編碼中,該Editor經常被注冊,通過使用binder.registerCustomEditor(這個binder就是之前admin和user
擁有同樣的name和age,方法里有個WebDataBinder類型的binder)
registerCustomEditor():它是WebDataBinder對象的方法,該方法在它的父類DataBinder中繼承來的,該方法中通過getPropertyEditorRegistry()獲得PropertyEditorRegistry對象,它就代表一個注冊,PropertyEditorRegistry是一個接口,該接口有很多實現類,其中一個PropertyEditorRegistrySupport實現類,該類有一個Map類型的defaultEditors和customEditors,defaultEditors是這個類創建的時候,SpringMVC自動生成defaultEditors。customEditors需要人工手動進行注冊,所謂注冊過程就是把Map進行一個put的操作,這里可以通過createDefaultEditors()了解它defaultEditors是如何搜索的,首先對defaultEditors成員變量進行聲明,聲明成一個HashMap長度為64,然后會放入很多defaultEditors
對于customEditors:下面圖片中的上面的registerCustomEditor方法是下面registerCustomEditor方法的重載,中間差了一個參數,該參數就是String propertyPath參數,如果上面的方法傳入了一個null,就會調用下面的方法。
對于Date數據類型綁定:
通過@InitBinder("date1")注解,并且在initDate1方法中WebDataBinder對象調用registerCustomEditor(),把這個東西進行注冊,因為默認注冊是沒有Date類型的,但是PropertyEditorSupport進行了擴展,支持很多子類,并把Date類型,轉換成CustomDateEditor類型,通過CustomDateEditor的構造器了解,一個參數是DateFormat一個參數是allowEmpty類型,這里new一個SimpleDateFormat
查看全部 -
本章主要介紹SpringMVC提供的PropertyEditor和自定義Formatter、Converter的使用場景、解決的實際的問題以及Formatter和Converter的簡單對比和選型依據
知識點1:自定義類型轉換器
【a】PropertyEditor:屬性編輯器,一般用于類型轉換,它是一個接口,有很多實現類,常用實現類是PropertyEditorSupport,該類常用方法有,setValue(Object value)、getValue(){返回的是Object類型的對象,這里返回的是通過setValue傳入的對象}、setAsText(String text),實現自定義PropertyEditor,通常不直接實現接口PropertyEditor,而是繼承PropertyEditorSupport進行擴展。
案例:創建一個名為MyPropertyEditor的自定義轉換器,并繼承PropertyEditorSupport,實現setAsText(String text)方法,該方法里創建User對象,并對傳進來的字符串用逗號分隔成字符串數組,把字符串數組第一個元素賦值給User對象的name,字符串數組的第二個元素賦值給User對象的age,再通過setValue(Object obj),把User對象傳入,這樣做的目的,前端就可以通過逗號前傳name逗號后傳age傳參數了。
【b】Formatter:Formatter<T>格式化器,它是一個接口,繼承Printer<T>和Parser<T>,他有很多實現類,這里拿CurrencyFormatter講解(貨幣轉換器)(DateFormatter是做日期的格式化轉換器,PercentFormatter是做百分比的格式化轉換器)。
案例:創建自定義格式化類型轉化器FormatterTest
test1()方法中,創建CurrencyFormatter對象,該對象調用setFractionDigits(2),該方法是用來保留小數點后幾位的,該對象再調用setRoundingMode(RoundingMode.CEILING),該方法是用作舍入操作,celling表示四舍五入,接著通過Assert類的assertEquals()斷言方法,拿123.13和123.125進行斷言。
案例2:將BigDecimal("123")格式化為字符串"$123.00"展示,CurrencyFormatter的parse方法返回值是BigDecimal,print方法返回值是String。
【c】Converter:格式化器,它也是接口,該接口有兩個泛型Converter<S,T>(其中<S>是source的類型,<T>是target的類型),它的實現類很多,例如NumberToCharacterConverter,把數字轉換為字符,這里使用StringToBooleanConverter進行講解,它實現了Converter<String,Boolean>接口,而且修飾的類使用的是final修飾符而不是public,原因是防止該類被修改、被繼承,Converter接口不讓實現類進行擴展,而Formatter不一樣,它可以使用CurrentFormatter繼承Formatter接口的實現類AbstractNumberFormatter,可以進行擴展。
案例:首先在dispatcher-servlet.xml中把StringToBooleanConverter注入,然后再配置<mvc:annotation-driven conversion-service="stringToBooleanConverter"/>
總結:內置的CustomDateEditor(它繼承了PropertyEditorSupport),內置的CurrencyFormatter(它繼承了AbstractNumberFormatter),內置的StringToBooleanConverter(它實現了Converter<String,Boolean>),就擴展性來說,這里所說擴展性都是Spring內置擴展性,Converter不可擴展,PropertyEditor一般局部使用配合webdatabinder使用,Formatter全局局部都可以,全局是通過Spring注入的方式,局部就像單元測試那樣,new一個Formatter,然后調用它的方法,Converter全局和局部都可以,全局也是通過Spring注入的方式,局部也是自己實現Converter接口,寫一個實現,然后new這個實現類。
查看全部 -
本章主要介紹Json、Xml的數據綁定以及坑
知識點1:SpringMVC——Json數據綁定
案例:Controller中方法參數為User類型對象,傳輸Json時,Json數據被放到RequestBody里,所以需要在User前+@RequestBody注解(它會把RequestBody數據區的內容反序列化為該參數的對象),這里使用DHC插件,該插件可以模擬各種請求,這里請求為POST,還需要把Content-Type,改成application/json如下圖
返回值:
JSON通過如下進行支持
查看全部
舉報