亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringMVC學(xué)習(xí)之JSON和全局異常處理詳解

 更新時間:2022年10月13日 10:06:07   作者:天蝎座的程序媛  
在項目上線之后,往往會出現(xiàn)一些不可預(yù)料的異常信息,對于邏輯性或設(shè)計性問題,開發(fā)人員或者維護人員需要通過日志,查看異常信息并排除異常,這篇文章主要給大家介紹了關(guān)于SpringMVC學(xué)習(xí)之JSON和全局異常處理的相關(guān)資料,需要的朋友可以參考下

1.為什么要全局異常處理

我們知道,系統(tǒng)中異常包括:編譯時異常和運行時異常RuntimeException,前者通過捕獲異常從而獲取異常信息,后者主要通過規(guī)范代碼開發(fā)、測試通過手段減少運行時異常的發(fā)生。在開發(fā)中,不管是dao層、service層還是controller層,都有可能拋出異常,在springmvc中,能將所有類型的異常處理從各處理過程解耦出來,既保證了相關(guān)處理過程的功能較單一,也實現(xiàn)了異常信息的統(tǒng)一處理和維護。

2.異常處理思路

 系統(tǒng)的dao、service、controller出現(xiàn)異常都通過throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進行異常處理。springmvc提供全局異常處理器(一個系統(tǒng)只有一個異常處理器)進行統(tǒng)一異常處理。

3.SpringMVC異常分類

        1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver;

        2)實現(xiàn)Spring的異常處理接口HandlerExceptionResolver自定義自己的異常處理器;

        3)使用@ControllerAdvice + @ExceptionHandler

4.綜合案例         

4.1 SpringMVC自帶的簡單異常處理器

SpringMVC中自帶了一個異常處理器叫SimpleMappingExceptionResolver,該處理器實現(xiàn)了HandlerExceptionResolver 接口,全局異常處理器都需要實現(xiàn)該接口

<!-- springmvc提供的簡單異常處理器 -->
   <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
       <!-- 定義默認的異常處理頁面 -->
       <property name="defaultErrorView" value="error"/>
       <!-- 定義異常處理頁面用來獲取異常信息的變量名,也可不定義,默認名為exception --> 
       <property name="exceptionAttribute" value="ex"/>
       <!-- 定義需要特殊處理的異常,這是重要點 --> 
       <property name="exceptionMappings">
           <props>
               <prop key="java.lang.RuntimeException">error</prop>
           </props>
           <!-- 還可以定義其他的自定義異常 -->
       </property>
   </bean> 

注:頁面跳轉(zhuǎn)由SpringMVC來接管了,所以此處的定義默認的異常處理頁面都應(yīng)該配置成邏輯視圖名。

4.2 通過HandlerExceptionResovler接口實現(xiàn)全局異常

@Component
   public class GlobalExceptionHandler implements HandlerExceptionResolver {
 
      @Override
      public ModelAndView resolveException(HttpServletRequest httpServletRequest,
                                         HttpServletResponse httpServletResponse,
                                         Object o, Exception e) {
          ...
      }
   }

注:

   1)通過instanceof判斷異常類型

   2)通過設(shè)置mv.setView(new MappingJackson2JsonView())方式返回JSON數(shù)據(jù);

4.3 使用@ControllerAdvice+@ExceptionHandler實現(xiàn)全局異常

@ControllerAdvice
   public class GlobalExceptionResolver {
 
     @ExceptionHandler(value=RuntimeException.class)
     public ModelAndView handler(Exception e){
        ...
     }
   }

4.4 響應(yīng)封裝類

4.4.1 創(chuàng)建自定義異常類BusinessException

BusinessException自定義異常類將繼承RuntimeException異常,該異常類用于處理在程序代碼運行過程所產(chǎn)生的運行時業(yè)務(wù)異常信息。

4.4.2 創(chuàng)建響應(yīng)枚舉類JsonResponseStatus

JsonResponseStatus響應(yīng)枚舉類用于自定義錯誤碼

4.4.3 創(chuàng)建響應(yīng)封裝類JsonResponseBody

JsonResponseBody響應(yīng)封裝類用于以JSON的形式統(tǒng)一輸出錯誤信息。

1. 添加jackson相關(guān)依賴

   <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.9.3</version>
   </dependency>
   <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-core</artifactId>
     <version>2.9.3</version>
   </dependency>
   <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-annotations</artifactId>
     <version>2.9.3</version>
   </dependency>     

2. 在springmvc-servlet.xml的mvc:annotation-driven標簽下添加如下內(nèi)容

<!--但是,從spring3.1開始DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter的使用已經(jīng)過時-->
   <!--spring3.1開始我們應(yīng)該用RequestMappingHandlerMapping來替換DefaultAnnotationHandlerMapping,-->
   <!--spring3.1開始我們應(yīng)該用用RequestMappingHandlerAdapter來替換AnnotationMethodHandlerAdapter--> 
   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJackson2HttpMessageConverter"/>
            </list>
        </property>
   </bean>
   <bean id="mappingJackson2HttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <!--處理中文亂碼以及避免IE執(zhí)行AJAX時,返回JSON出現(xiàn)下載文件-->
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
                <value>text/json;charset=UTF-8</value>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
   </bean>

3. 在請求處理方法中添加@ResponseBody注解,將返回結(jié)果直接轉(zhuǎn)換成JSON

@RequestMapping("/loadFwxxToJson")
   @ResponseBody
   public Fwxx loadFwxxToJson(@ModelAttribute Fwxx fwxx) {
     ...
   }

注:此請求處理方法返回的已經(jīng)不是視圖了

4. 解決JSON死循環(huán)問題:@JsonIgnore

5. 解決JSON格式化問題

JsonFormat
日期格式化
數(shù)字格式化(使用較少)

6. 轉(zhuǎn)換時指定屬性名:@JsonProperty("error_code")

總結(jié)

到此這篇關(guān)于SpringMVC學(xué)習(xí)之JSON和全局異常處理的文章就介紹到這了,更多相關(guān)SpringMVC JSON和全局異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java打亂ArrayList生成一個隨機序列列表

    Java打亂ArrayList生成一個隨機序列列表

    有時候會需要將一個ArrayList或者數(shù)組中的數(shù)字打亂,方便后續(xù)使用,比如隨機出題、答案選項打亂、連線題打亂、抽獎號碼打亂等等,把我自己寫的一段代碼貼出來分享給大家。
    2016-08-08
  • idea中Stash與Unstash的使用及說明

    idea中Stash與Unstash的使用及說明

    這篇文章主要介紹了idea中Stash與Unstash的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java中的常用時間日期類總結(jié)(Date、DateFormat)

    Java中的常用時間日期類總結(jié)(Date、DateFormat)

    在Java開發(fā)中處理時間和日期是相當常見的任務(wù),無論是計算日期差異、格式化日期顯示、解析日期字符串還是進行日期計算,都需要一些時間和日期處理的技巧,這篇文章主要給大家介紹了關(guān)于Java中常用時間日期類(Date、DateFormat)的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • spring如何快速穩(wěn)定解決循環(huán)依賴問題

    spring如何快速穩(wěn)定解決循環(huán)依賴問題

    這篇文章主要介紹了spring如何快速穩(wěn)定解決循環(huán)依賴問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Java-lambda表達式入門看這一篇就夠了

    Java-lambda表達式入門看這一篇就夠了

    lambda表達式最簡單的作用就是用于簡化創(chuàng)建匿名內(nèi)部類對象,Lambda表達式是一個可傳遞的代碼塊,可以在以后執(zhí)行一次或多次,下面通過本文給大家介紹Java-lambda表達式入門教程,感興趣的朋友一起看看吧
    2021-05-05
  • Spring?Security中自定義cors配置及原理解析

    Spring?Security中自定義cors配置及原理解析

    在Spring框架中,通過自定義CORS配置可根據(jù)實際情況調(diào)整URL的協(xié)議、主機、端口等,以適應(yīng)"同源安全策略",配置原理涉及CorsConfigurer和CorsFilter,自定義配置需要注意@Configuration注解、方法名以及可能的@Autowired注解
    2024-10-10
  • springboot+vue實現(xiàn)Minio文件存儲的示例代碼

    springboot+vue實現(xiàn)Minio文件存儲的示例代碼

    本文主要介紹了springboot+vue實現(xiàn)Minio文件存儲的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Java多線程中wait、notify、notifyAll使用詳解

    Java多線程中wait、notify、notifyAll使用詳解

    這篇文章主要介紹了Java多線程中wait、notify、notifyAll使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Guava?Retryer實現(xiàn)接口重試的示例

    Guava?Retryer實現(xiàn)接口重試的示例

    本文主要介紹了Guava?Retryer實現(xiàn)接口重試的示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java中時間戳的獲取和轉(zhuǎn)換的示例分析

    Java中時間戳的獲取和轉(zhuǎn)換的示例分析

    這篇文章主要介紹了Java中時間戳的獲取和轉(zhuǎn)換的示例分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論