2023SpringBoot教學(xué)課件 第11章 類型轉(zhuǎn)換和格式化_第1頁
2023SpringBoot教學(xué)課件 第11章 類型轉(zhuǎn)換和格式化_第2頁
2023SpringBoot教學(xué)課件 第11章 類型轉(zhuǎn)換和格式化_第3頁
2023SpringBoot教學(xué)課件 第11章 類型轉(zhuǎn)換和格式化_第4頁
2023SpringBoot教學(xué)課件 第11章 類型轉(zhuǎn)換和格式化_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第11章類型轉(zhuǎn)換和格式化主要內(nèi)容

ConverterFormatter11.1類型轉(zhuǎn)換的意義

開發(fā)者需要自己在Servlet中進(jìn)行類型轉(zhuǎn)換,并將其封裝成值對(duì)象。這些類型轉(zhuǎn)換操作全部手工完成,異常繁瑣。

對(duì)于SpringMVC框架而言,它必須將請(qǐng)求參數(shù)轉(zhuǎn)換成值對(duì)象類里各屬性對(duì)應(yīng)的數(shù)據(jù)類型——這就是類型轉(zhuǎn)換的意義。11.2ConverterSpringMVC框架的Converter<S,T>是一個(gè)可以將一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型的接口,這里S表示源類型,T表示目標(biāo)類型。開發(fā)者在實(shí)際應(yīng)用中,使用框架內(nèi)置的類型轉(zhuǎn)換器基本就夠了,但有時(shí)需要編寫具有特定功能的類型轉(zhuǎn)換器。11.2.1內(nèi)置的類型轉(zhuǎn)換器

在SpringMVC框架中,對(duì)于常用的數(shù)據(jù)類型,開發(fā)者無需創(chuàng)建自己的類型轉(zhuǎn)換器,因?yàn)镾pringMVC框架有許多內(nèi)置的類型轉(zhuǎn)換器完成常用的類型轉(zhuǎn)換。

注意:內(nèi)置類型轉(zhuǎn)換器使用時(shí),請(qǐng)求參數(shù)輸入值與接收參數(shù)類型要兼容,否則報(bào)400錯(cuò)誤。請(qǐng)求參數(shù)類型與接收參數(shù)類型不兼容問題,需要學(xué)習(xí)輸入校驗(yàn)后才可解決。11.2.2自定義類型轉(zhuǎn)換器

當(dāng)SpringMVC框架內(nèi)置的類型轉(zhuǎn)換器不能滿足需求時(shí),開發(fā)者可以開發(fā)自己的類型轉(zhuǎn)換器。例如有個(gè)應(yīng)用ch11a希望用戶在頁面表單中輸入信息來創(chuàng)建商品信息。當(dāng)輸入“apple,10.58,200”時(shí),表示在程序中自動(dòng)創(chuàng)建一個(gè)newGoods,并將“apple”值自動(dòng)賦值給goodsname屬性,將“10.58”值自動(dòng)賦值給goodsprice屬性,將“200”值自動(dòng)賦值給goodsnumber屬性。想實(shí)現(xiàn)上述應(yīng)用需要做以下5件事:創(chuàng)建實(shí)體類創(chuàng)建控制器類創(chuàng)建自定義類型轉(zhuǎn)換器注冊(cè)類型轉(zhuǎn)換器創(chuàng)建相關(guān)視圖第1步

創(chuàng)建實(shí)體類在ch11a的src目錄下創(chuàng)建包pojo,并在該包中創(chuàng)建名為GoodsModel的實(shí)體類,代碼如下:packagepojo;publicclassGoodsModel{ privateStringgoodsname; privatedoublegoodsprice; privateintgoodsnumber; //省略setter和getter方法}第2步

創(chuàng)建控制器類@Controller@RequestMapping("/my")publicclassConverterController{

@RequestMapping("/converter") /*使用@RequestParam("goods")接收請(qǐng)求參數(shù),

然后調(diào)用自定義類型轉(zhuǎn)換器GoodsConverter將字符串值轉(zhuǎn)換為GoodsModel的對(duì)象gm */ publicStringmyConverter(@RequestParam("goods")GoodsModelgm,Modelmodel){ model.addAttribute("goods",gm); return"showGoods"; }}第3步

創(chuàng)建自定義類型轉(zhuǎn)換器

自定義類型轉(zhuǎn)換器類需要實(shí)現(xiàn)Converter<S,T>接口,重寫convert(S)接口方法。convert(S)方法功能是將源數(shù)據(jù)類型S轉(zhuǎn)換成目標(biāo)數(shù)據(jù)類型T。在ch11a的src目錄下創(chuàng)建包c(diǎn)onverter,并在該包中創(chuàng)建名為GoodsConverter的自定義類型轉(zhuǎn)換器類。第4步

注冊(cè)類型轉(zhuǎn)換器

在ch11a的WEB-INF目錄下創(chuàng)建配置文件springmvc-servlet.xml,并在配置文件中注冊(cè)自定義類型轉(zhuǎn)換器,配置文件代碼如下:

<!--注冊(cè)類型轉(zhuǎn)換器GoodsConverter--><beanid="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean"> <propertyname="converters"> <list> <beanclass="converter.GoodsConverter"/> </list> </property></bean>第5步

創(chuàng)建相關(guān)視圖在ch11a應(yīng)用的WebContent目錄下,創(chuàng)建信息采集頁面input.jsp,核心代碼如下:<formaction="${pageContext.request.contextPath}/my/converter"method="post">

請(qǐng)輸入商品信息(格式為:apple,10.58,200): <inputtype="text"name="goods"/><br> <inputtype="submit"value="提交"/></form>在ch11a應(yīng)用的/WEB-INF/jsp/目錄下,創(chuàng)建信息顯示頁面showGoods.jsp,核心代碼如下:<body>

您創(chuàng)建的商品信息如下:<br><!--使用EL表達(dá)式取出model中g(shù)oods的信息-->

商品名為:${goods.goodsname},

商品價(jià)格為:${goods.goodsprice},

商品數(shù)量為:${goods.goodsnumber}。</body>最后,使用地址http://localhost:8080/ch11a/input.jsp測(cè)試應(yīng)用。11.3FormatterSpringMVC框架的Formatter<T>與Converter<S,T>一樣,也是一個(gè)可以將一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型的接口。但不同的是,F(xiàn)ormatter<T>的源數(shù)據(jù)類型必須是String類型,而Converter<S,T>的源數(shù)據(jù)類型是任意數(shù)據(jù)類型。

在Web應(yīng)用中,由HTTP發(fā)送的請(qǐng)求數(shù)據(jù)到控制器中都是以String類型獲取。因此,在Web應(yīng)用中選擇Formatter<T>比選擇Converter<S,T>更加合理。11.3.1內(nèi)置的格式化轉(zhuǎn)換器SpringMVC提供幾個(gè)內(nèi)置的格式化轉(zhuǎn)換器,具體如下:NumberFormatter:實(shí)現(xiàn)Number與String之間的解析與格式化。CurrencyFormatter:實(shí)現(xiàn)Number與String之間的解析與格式化(帶貨幣符號(hào))。PercentFormatter:實(shí)現(xiàn)Number與String之間的解析與格式化(帶百分?jǐn)?shù)符號(hào))。DateFormatter:實(shí)現(xiàn)Date與String之間的解析與格式化。11.3.2自定義格式化轉(zhuǎn)換器

自定義格式化轉(zhuǎn)換器,就是編寫一個(gè)實(shí)現(xiàn)org.springframework.format.Formatter接口的Java類。該接口聲明如下:

publicinterfaceFormatter<T>

這里的T表示由字符串轉(zhuǎn)換的目標(biāo)數(shù)據(jù)類型。該接口有parse和print兩個(gè)接口方法,自定義格式化轉(zhuǎn)換器類必須覆蓋它們。

publicTparse(Strings,java.util.Localelocale) publicStringprint(Tobject,java.util.Localelocale)parse方法的功能是利用指定的Locale將一個(gè)String類型轉(zhuǎn)換成目標(biāo)類型,print方法與之相反,返回目標(biāo)對(duì)象的字符串表示。

下面通過具體應(yīng)用ch11b講解自定義格式化轉(zhuǎn)換器的用法。ch11b應(yīng)用與ch11a應(yīng)用,具有相同的JAR包、web.xml。想實(shí)現(xiàn)上述應(yīng)用ch11b的需求,需要做以下5件事:創(chuàng)建實(shí)體類創(chuàng)建控制器類創(chuàng)建自定義格式化轉(zhuǎn)換器注冊(cè)格式化轉(zhuǎn)換器創(chuàng)建相關(guān)視圖

商品名稱、價(jià)格和數(shù)量使用內(nèi)置的類型轉(zhuǎn)換器完成轉(zhuǎn)換;商品日期需要自定義的格式化轉(zhuǎn)換器完成。第1步

創(chuàng)建實(shí)體類

在ch11b的src目錄下創(chuàng)建包pojo,并在該包中創(chuàng)建名為GoodsModelb的實(shí)體類,代碼如下:packagepojo;importjava.util.Date;publicclassGoodsModelb{ privateStringgoodsname; privatedoublegoodsprice; privateintgoodsnumber; privateDategoodsdate; //省略setter和getter方法}第2步

創(chuàng)建控制器類@Controller@RequestMapping("/my")publicclassFormatterController{ @RequestMapping("/formatter") publicStringmyConverter(GoodsModelbgm,Modelmodel){ model.addAttribute("goods",gm); return"showGoodsb"; }}第3步

創(chuàng)建格式化轉(zhuǎn)換器類publicclassMyFormatterimplementsFormatter<Date>{

SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd"); @Override publicStringprint(Dateobject,Localearg1){ returndateFormat.format(object); } @Override publicDateparse(Stringsource,Localearg1)throwsParseException{ returndateFormat.parse(source);//Formatter只能對(duì)字符串轉(zhuǎn)換 }}第4步

注冊(cè)格式化轉(zhuǎn)換器<!--注冊(cè)MyFormatter--><beanid="conversionService"class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

<propertyname="formatters"> <set> <beanclass="f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論