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