欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中的文件上傳和異常處理詳解

 更新時間:2023年09月01日 10:11:39   作者:韓_師兄  
這篇文章主要介紹了SpringBoot中的文件上傳和異常處理詳解,對于機(jī)器客戶端,它將生成JSON響應(yīng),其中包含錯誤,HTTP狀態(tài)和異常消息的詳細(xì)信息,對于瀏覽器客戶端,響應(yīng)一個"whitelabel"錯誤視圖,以HTML格式呈現(xiàn)相同的數(shù)據(jù),需要的朋友可以參考下

文件上傳

前端表單

<form method="post" action="/upload" enctype="multipart/form-data">
    <input type="file" name="file"><br>
    <input type="submit" value="提交">
</form>

后臺接收

    /**
     * MultipartFile 自動封裝上傳過來的文件
     * @param email
     * @param username
     * @param headerImg
     * @param photos
     * @return
     */
    @PostMapping("/upload")
    public String upload(@RequestParam("email") String email,
                         @RequestParam("username") String username,
                         @RequestPart("headerImg") MultipartFile headerImg,
                         @RequestPart("photos") MultipartFile[] photos) throws IOException {
        log.info("上傳的信息:email={},username={},headerImg={},photos={}",
                email,username,headerImg.getSize(),photos.length);
        if(!headerImg.isEmpty()){
            // 保存到文件服務(wù)器,OSS服務(wù)器
            String originalFilename = headerImg.getOriginalFilename();
            headerImg.transferTo(new File("D:\\cache\\"+originalFilename));
        }
        if(photos.length > 0){
            for (MultipartFile photo : photos) {
                if(!photo.isEmpty()){
                    String originalFilename = photo.getOriginalFilename();
                    photo.transferTo(new File("D:\\cache\\"+originalFilename));
                }
            }
        }
        return "main";
    }

配置原理

**文件上傳自動配置類-MultipartAutoConfiguration-**MultipartProperties

  • 自動配置好了 StandardServletMultipartResolver 【文件上傳解析器】

1 請求進(jìn)來使用文件上傳解析器判斷(isMultipart)并封裝(resolveMultipart,返回MultipartHttpServletRequest)文件上傳請求

2 參數(shù)解析器來解析請求中的文件內(nèi)容封裝成MultipartFile

3 將request中文件信息封裝為一個Map

異常處理

錯誤處理

默認(rèn)規(guī)則

默認(rèn)情況下,Spring Boot提供 /error 處理所有錯誤的映射

對于機(jī)器客戶端,它將生成JSON響應(yīng),其中包含錯誤,HTTP狀態(tài)和異常消息的詳細(xì)信息。對于瀏覽器客戶端,響應(yīng)一個“ whitelabel”錯誤視圖,以HTML格式呈現(xiàn)相同的數(shù)據(jù)

要對其進(jìn)行自定義,添加 View 解析為 error

  • 要完全替換默認(rèn)行為,可以實(shí)現(xiàn) ErrorController 并注冊該類型的Bean定義,或添加 ErrorAttributes類型的組件 以使用現(xiàn)有機(jī)制但替換其內(nèi)容
  • error/下的4xx,5xx頁面會被自動解析

定制錯誤處理邏輯

自定義錯誤頁:

  • error/404.html error/5xx.html;有精確的錯誤狀態(tài)碼頁面就匹配精確,沒有就找 4xx.html;如果都沒有就觸發(fā)白頁

@ControllerAdvice+@ExceptionHandler處理全局異常;底層是 ExceptionHandlerExceptionResolver 支持的

@ResponseStatus+自定義異常 ;底層是 ResponseStatusExceptionResolver ,把responsestatus注解的信息底層調(diào)用 response.sendError(statusCode, resolvedReason);tomcat發(fā)送的/error

Spring底層的異常,如 參數(shù)類型轉(zhuǎn)換異常

  • DefaultHandlerExceptionResolver 處理框架底層的異常

自定義實(shí)現(xiàn) HandlerExceptionResolver 處理異常;可以作為默認(rèn)的全局異常處理規(guī)則

ErrorViewResolver 實(shí)現(xiàn)自定義處理異常

  • response.sendError 。error請求就會轉(zhuǎn)給controller
  • 異常沒有任何人能處理。tomcat底層 response.sendError。error請求就會轉(zhuǎn)給controller
  • basicErrorController 要去的頁面地址是 ErrorViewResolver

異常處理自動配置原理

ErrorMvcAutoConfiguration 自動配置異常處理規(guī)則

  • 容器中的組件:類型:DefaultErrorAttributes -> id:errorAttributes
    • DefaultErrorAttributes 定義錯誤頁面中可以包含哪些數(shù)據(jù)
  • **容器中的組件:類型:**BasicErrorController --> id:basicErrorController(json+白頁 適配響應(yīng))
    • 處理默認(rèn) /error 路徑的請求;頁面響應(yīng) new ModelAndView(“error”, model);
    • 容器中有組件 View->id是error;(響應(yīng)默認(rèn)錯誤頁)
    • 容器中放組件 BeanNameViewResolver(視圖解析器);按照返回的視圖名作為組件的id去容器中找View對象
  • **容器中的組件:**類型:**DefaultErrorViewResolver -> id:**conventionErrorViewResolver
    • 如果發(fā)生錯誤,會以HTTP的狀態(tài)碼 作為視圖頁地址(viewName),找到真正的頁面
    • error/404、5xx.html

異常處理流程

1 執(zhí)行目標(biāo)方法,目標(biāo)方法運(yùn)行期間有任何異常都會被catch、而且標(biāo)志當(dāng)前請求結(jié)束;并且用 dispatchException

2 進(jìn)入視圖解析流程(頁面渲染)

processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

3 mv = processHandlerException;處理handler發(fā)生的異常,處理完成返回ModelAndView

  • 遍歷所有的 **handlerExceptionResolvers,看誰能處理當(dāng)前異常【**HandlerExceptionResolver處理器異常解析器】
  • 系統(tǒng)默認(rèn)的 異常解析器
    • DefaultErrorAttributes先來處理異常。把異常信息保存到rrequest域,并且返回null;
    • 默認(rèn)沒有任何人能處理異常,所以異常會被拋出
      • 沒有任何人能處理最終底層就會發(fā)送 /error 請求。會被底層的BasicErrorController處理
      • 解析錯誤視圖;遍歷所有的 ErrorViewResolver 看誰能解析
      • 默認(rèn)的 DefaultErrorViewResolver ,作用是把響應(yīng)狀態(tài)碼作為錯誤頁的地址,error/500.html
      • 模板引擎最終響應(yīng)這個頁面 error/500.html

到此這篇關(guān)于SpringBoot中的文件上傳和異常處理詳解的文章就介紹到這了,更多相關(guān)SpringBoot文件上傳和異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+Vue跨域配置(CORS)問題得解決過程

    SpringBoot+Vue跨域配置(CORS)問題得解決過程

    在使用 Spring Boot 和 Vue 開發(fā)前后端分離的項(xiàng)目時,跨域資源共享(CORS)問題是一個常見的挑戰(zhàn),接下來,我將分享我是如何一步步解決這個問題的,包括中間的一些試錯過程,希望能夠幫助到正在經(jīng)歷類似問題的你
    2024-08-08
  • Java二叉樹中LCA問題解決方法兩則

    Java二叉樹中LCA問題解決方法兩則

    這篇文章主要介紹了Java二叉樹中LCA問題解決方法,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2022-12-12
  • 基于FLink實(shí)現(xiàn)實(shí)時安全檢測的示例代碼

    基于FLink實(shí)現(xiàn)實(shí)時安全檢測的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何基于FLink實(shí)現(xiàn)實(shí)時安全檢測的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的可以了解一下
    2023-02-02
  • IDEA插件推薦之Maven-Helper的教程圖解

    IDEA插件推薦之Maven-Helper的教程圖解

    這篇文章主要介紹了IDEA插件推薦之Maven-Helper的相關(guān)知識,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考
    2020-07-07
  • 詳解Spring Cloud Finchley版中Consul多實(shí)例注冊的問題處理

    詳解Spring Cloud Finchley版中Consul多實(shí)例注冊的問題處理

    這篇文章主要介紹了詳解Spring Cloud Finchley版中Consul多實(shí)例注冊的問題處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 一文詳解如何在Java中啟動線程

    一文詳解如何在Java中啟動線程

    今天要跟大家聊一聊Java多線程的原理和使用方式,Java多線程是提高程序性能的重要機(jī)制,了解線程生命周期、同步機(jī)制、線程池和線程間通信等概念,可以幫助我們編寫出高效、可靠的多線程程序,需要的朋友可以參考下
    2024-07-07
  • JAVA初級項(xiàng)目——實(shí)現(xiàn)圖書管理系統(tǒng)

    JAVA初級項(xiàng)目——實(shí)現(xiàn)圖書管理系統(tǒng)

    這篇文章主要介紹了JAVA如何實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java中Executor,ExecutorService,ThreadPoolExecutor詳解

    java中Executor,ExecutorService,ThreadPoolExecutor詳解

    這篇文章主要介紹了java中Executor,ExecutorService,ThreadPoolExecutor詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java后端登錄實(shí)現(xiàn)返回token

    Java后端登錄實(shí)現(xiàn)返回token

    本文主要介紹了Java后端登錄實(shí)現(xiàn)返回token,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 關(guān)于Spring BeanPostProcessor的執(zhí)行順序

    關(guān)于Spring BeanPostProcessor的執(zhí)行順序

    這篇文章主要介紹了Spring BeanPostProcessor的執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論