




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章類型轉(zhuǎn)換和格式化主要內(nèi)容類型轉(zhuǎn)換的意義ConverterFormatter4.1類型轉(zhuǎn)換的意義
對于SpringMVC框架而言,它必須將請求參數(shù)轉(zhuǎn)換成值對象類里各屬性對應(yīng)的數(shù)據(jù)類型——這就是類型轉(zhuǎn)換的意義。主要內(nèi)容類型轉(zhuǎn)換的意義ConverterFormatter4.2ConverterSpringMVC框架的Converter<S,T>是一個(gè)可以將一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型的接口,這里S表示源類型,T表示目標(biāo)類型。4.2.1內(nèi)置的類型轉(zhuǎn)換器SpringMVC框架提供的內(nèi)置類型轉(zhuǎn)換器,包括如下幾種類型。
標(biāo)量轉(zhuǎn)換器
集合、數(shù)組相關(guān)轉(zhuǎn)換器
注意:內(nèi)置類型轉(zhuǎn)換器使用時(shí),請求參數(shù)輸入值與接收參數(shù)類型要兼容,否則報(bào)400錯(cuò)誤。4.2.2自定義類型轉(zhuǎn)換器
當(dāng)SpringMVC框架內(nèi)置的類型轉(zhuǎn)換器不能滿足需求時(shí),開發(fā)者可以開發(fā)自己的類型轉(zhuǎn)換器。例如有個(gè)應(yīng)用ch4_1希望用戶在頁面表單中輸入信息來創(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屬性。1.創(chuàng)建Maven項(xiàng)目并添加依賴的JAR包c(diǎn)h4_1添加的依賴有spring-webmvc。pom.xml文件內(nèi)容與【例3-1】的相同,不再贅述。2.創(chuàng)建相關(guān)視圖<body> <formaction="my/converter"method="post">
請輸入商品信息(格式為:apple,10.58,200):<inputtype="text"name="goods"/><br> <inputtype="submit"value="提交"/> </form></body><body>
您創(chuàng)建的商品信息如下:<br><!--使用EL表達(dá)式取出model中g(shù)oods的信息-->
商品名為:${goods.goodsname},
商品價(jià)格為:${goods.goodsprice},
商品數(shù)量為:${goods.goodsnumber}。</body>3.創(chuàng)建實(shí)體類publicclassGoodsModel{ privateStringgoodsname; privatedoublegoodsprice; privateintgoodsnumber; //省略setter和getter方法}4.創(chuàng)建控制器類@Controller@RequestMapping("/my")publicclassConverterController{ @RequestMapping("/converter") /*使用@RequestParam("goods")接收請求參數(shù),
然后調(diào)用自定義類型轉(zhuǎn)換器GoodsConverter將字符串值轉(zhuǎn)換為GoodsModel的對象gm */ publicStringmyConverter(@RequestParam("goods")GoodsModelgm,Modelmodel){ model.addAttribute("goods",gm); return"showGoods"; }}5.創(chuàng)建自定義類型轉(zhuǎn)換器@ComponentpublicclassGoodsConverterimplementsConverter<String,GoodsModel>{ @Override publicGoodsModelconvert(Stringsource){ //創(chuàng)建一個(gè)Goods實(shí)例 GoodsModelgoods=newGoodsModel(); //以“,”分隔的 StringstringValues[]=source.split(","); if(stringValues!=null&&stringValues.length==3){
//為Goods實(shí)例賦值 goods.setGoodsname(stringValues[0]); goods.setGoodsprice(Double.parseDouble(stringValues[1])); goods.setGoodsnumber(Integer.parseInt(stringValues[2])); returngoods; }else{ thrownewIllegalArgumentException(String.format("類型轉(zhuǎn)換失敗,需要格式‘a(chǎn)pple,10.58,200’,但格式是[%s]",source)); } }}6.創(chuàng)建配置類,并注冊類型轉(zhuǎn)換器
創(chuàng)建SpringMVC的Java配置類SpringMVCConfig。在該配置類中使用@Configuration注解聲明該類為Java配置類;使用@EnableWebMvc注解開啟默認(rèn)配置,如ViewResolver;使用@ComponentScan注解掃描注解的類;使用@Bean注解配置視圖解析器;該類需要實(shí)現(xiàn)WebMvcConfigurer接口來配置SpringMVC;使用ConfigurableConversionService接口注冊類型轉(zhuǎn)換器。 @PostConstruct publicvoidinitEditableAvlidation(){ if(conversionService!=null){ conversionService.addConverter(goodsConverter); //這里可以注冊多個(gè)類型轉(zhuǎn)換器 } }創(chuàng)建Web配置類
創(chuàng)建Web的Java類WebConfig。該類需要實(shí)現(xiàn)WebApplicationInitializer接口替代web.xml文件的配置。實(shí)現(xiàn)該接口將會(huì)自動(dòng)啟動(dòng)Servlet容器。在WebConfig類中需要使用AnnotationConfigWebApplicationContext注冊SpringMVC的Java配置類SpringMVCConfig,并和當(dāng)前ServletContext關(guān)聯(lián)。然后,在該類中需要注冊SpringMVC的DispatcherServlet。最后,在該類中使用javax.servlet.FilterRegistration.Dynamic注冊字符編碼過濾器,防止中文亂碼。7.發(fā)布并測試應(yīng)用
選中input.jsp文件名單擊右鍵,選擇RunAs/RunonServer發(fā)布并測試應(yīng)用。主要內(nèi)容類型轉(zhuǎn)換的意義ConverterFormatter4.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ù)類型。4.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之間的解析與格式化。4.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)換器類必須重寫它們?!纠?-2】按照上述步驟采用自定義格式化轉(zhuǎn)換器完成應(yīng)用ch4_2的需求。GoodsModel實(shí)體類接收請求參數(shù)時(shí),商品名稱、價(jià)格和數(shù)量使用內(nèi)置的類型轉(zhuǎn)換器完成轉(zhuǎn)換;商品日期需要自定義的格式化轉(zhuǎn)換器完成。創(chuàng)建格式化轉(zhuǎn)換器類@ComponentpublicclassMyFormatterimplementsFormatter<Date>{ SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd"); @Override publicStringprint(Dateobject,Localearg1){ returndateFormat.format(object); } @Override publicDateparse(Stringsource,Localearg1)throwsParseException{ returndateFormat.parse(source);//Formatter只能對字符串轉(zhuǎn)換 }}注冊格式化轉(zhuǎn)換器 /** *注冊格式化轉(zhuǎn)換器 */ @PostConstruct /** *被@PostConstruct修飾的方法會(huì)在服務(wù)器加載Servlet的時(shí)候運(yùn)行,并且只會(huì)被服務(wù)器調(diào)用一次,類似于Servlet
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貨損補(bǔ)償合同范本
- 游樂設(shè)備維修合同范本
- 畫定金合同范本
- 新欠條合同范本
- 2025年中國停車場自動(dòng)收款機(jī)行業(yè)發(fā)展運(yùn)行現(xiàn)狀及發(fā)展趨勢預(yù)測報(bào)告
- 食品銷售公司合同范本
- 中國兒童護(hù)膚品行業(yè)市場全景評估及投資前景展望報(bào)告
- 私人建房合同范本承包
- 中國消防摩托車行業(yè)發(fā)展前景預(yù)測及投資方向研究報(bào)告
- 2025年新型膜材料及其裝置項(xiàng)目建議書
- 2024年12月重慶大學(xué)醫(yī)院公開招聘醫(yī)生崗位2人(有編制)筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 主題班會(huì):新學(xué)期 新起點(diǎn) 新期待
- 披薩制作流程
- 廈門2025年福建廈門市公安文職人員服務(wù)中心招聘17人筆試歷年參考題庫附帶答案詳解
- 2025年高三歷史教學(xué)工作計(jì)劃
- 《職業(yè)性肌肉骨骼疾患的工效學(xué)預(yù)防指南 》
- 不同產(chǎn)地筠連紅茶風(fēng)味化學(xué)成分差異分析
- DB50 577-2015 汽車整車制造表面涂裝大氣污染物排放標(biāo)準(zhǔn)
- 生態(tài)安全課件
- 大學(xué)英語(西安歐亞學(xué)院)知到智慧樹章節(jié)測試課后答案2024年秋西安歐亞學(xué)院
- 人教版高中英語挖掘文本深度學(xué)習(xí)-選修四-UNIT-2-(答案版)
評論
0/150
提交評論