Spring學(xué)習(xí)(七)Spring MVC的高級(jí)技術(shù)

一、處理multipart形式的數(shù)據(jù)

  1. 配置multipart解析器
    從Spring 3.1開(kāi)始衫哥, Spring內(nèi)置了兩個(gè)MultipartResolver的實(shí)現(xiàn)供我們選擇:
  • CommonsMultipartResolver: 使用Jakarta Commons FileUpload解析multipart請(qǐng)求;
  • StandardServletMultipartResolver: 依賴(lài)于Servlet 3.0對(duì)multipart請(qǐng)求的支持(始于Spring 3.1) 襟锐。

StandardServletMultipartResolver是最佳的選擇撤逢,但是如果我們需要將應(yīng)用部署到非Servlet 3.0的容器中, 那么就得需要替代的方案粮坞。 Spring內(nèi)置了CommonsMultipartResolver蚊荣, 可以作為StandardServletMultipartResolver的替代方案。(配置方式見(jiàn)p257)

使用StandardServletMultipartResolver:
聲明為bean莫杈,添加到在Spring應(yīng)用上下文中

 @Bean
 public MultipartResolver multipartResolver() throws IOException {
  return new StandardServletMultipartResolver();
  }

在Servlet中指定multipart的配置

使用Servlet初始化類(lèi)

@Override
 protected void customizeRegistration(Dynamic registration) {
 registration.setMultipartConfig(
   new MultipartConfigElement("/tmp/spittr/uploads", 2097152, 4194304, 0));
}

使用web.xml


使用web.xml
  1. 處理multipart請(qǐng)求
    在某個(gè)控制器方法參數(shù)上添加@RequestPart注解

    <form method="POST" th:object="${spitter}" enctype="multipart/form-data">
    <label>Profile Picture</label>:
          <input type="file"
                 name="profilePicture"
                 accept="image/jpeg,image/png,image/gif" />
      </form>
    //控制中有三種方式
    //1.
    @RequestMapping(value="/register", method=POST)
    public String processRegistration(
      @RequestPart(value="profilePictures", required=false) byte[] fileBytes) throws IOException {}
    //2.
    @RequestMapping(value="/register", method=POST)
    public String processRegistration(
      @RequestPart(value="profilePictures", required=false) Part fileBytes) throws IOException {}
    //3.
    使用MultipartFile
    用在表單實(shí)體類(lèi)中互例。
    用在參數(shù)中:
    @RequestMapping(method=RequestMethod.POST)
      public String processUpload(@RequestPart("file") MultipartFile file) {}
    
    

三、處理異常

異常必須要以某種方式轉(zhuǎn)換為響應(yīng)筝闹。
Spring提供了多種方式將異常轉(zhuǎn)換為響應(yīng):

  • 特定的Spring異常將會(huì)自動(dòng)映射為指定的HTTP狀態(tài)碼媳叨;
  • 異常上可以添加@ResponseStatus注解, 從而將其映射為某一個(gè)HTTP狀態(tài)碼关顷;
  • 在方法上可以添加@ExceptionHandler注解糊秆, 使其用來(lái)處理異常。
  1. 處理異常的最簡(jiǎn)單方式就是將其映射到HTTP狀態(tài)碼上议双, 進(jìn)而放到響應(yīng)之中痘番。
  • 將異常映射為HTTP狀態(tài)碼
    Spring提供了一種機(jī)制, 能夠通過(guò)@ResponseStatus注解將異常映射為HTTP狀態(tài)碼。
    @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Spittle Not Found")
    public class SpittleNotFoundException extends RuntimeException {}
    
  1. 編寫(xiě)異常處理的方法
    // @ExceptionHandler注解標(biāo)注的方法能處理同一個(gè)控制器中所有處理器方法所拋出的異常汞舱。
    @ExceptionHandler(DuplicateSpittleException.class)
      public String handleNotFound() {
    return "error/duplicate";
      }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伍纫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子昂芜,更是在濱河造成了極大的恐慌翻斟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件说铃,死亡現(xiàn)場(chǎng)離奇詭異访惜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)腻扇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)债热,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人幼苛,你說(shuō)我怎么就攤上這事窒篱。” “怎么了舶沿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵墙杯,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我括荡,道長(zhǎng)高镐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任畸冲,我火速辦了婚禮嫉髓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邑闲。我一直安慰自己算行,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布苫耸。 她就那樣靜靜地躺著州邢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褪子。 梳的紋絲不亂的頭發(fā)上量淌,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音褐筛,去河邊找鬼类少。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渔扎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播信轿,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晃痴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼残吩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起倘核,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泣侮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后紧唱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體活尊,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年漏益,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛹锰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绰疤,死狀恐怖铜犬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轻庆,我是刑警寧澤癣猾,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站余爆,受9級(jí)特大地震影響纷宇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛾方,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一呐粘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧转捕,春花似錦作岖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枢步,卻和暖如春沉删,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背醉途。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工矾瑰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人隘擎。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓殴穴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子采幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容