最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

2.異常處理思路

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

3.SpringMVC異常分類(lèi)

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

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

        3)使用@ControllerAdvice + @ExceptionHandler

4.綜合案例         

4.1 SpringMVC自帶的簡(jiǎn)單異常處理器

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

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

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

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

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

注:

   1)通過(guò)instanceof判斷異常類(lèi)型

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

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

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

4.4 響應(yīng)封裝類(lèi)

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

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

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

JsonResponseStatus響應(yīng)枚舉類(lèi)用于自定義錯(cuò)誤碼

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

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

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

   <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標(biāo)簽下添加如下內(nèi)容

<!--但是,從spring3.1開(kāi)始DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter的使用已經(jīng)過(guò)時(shí)-->
   <!--spring3.1開(kāi)始我們應(yīng)該用RequestMappingHandlerMapping來(lái)替換DefaultAnnotationHandlerMapping,-->
   <!--spring3.1開(kāi)始我們應(yīng)該用用RequestMappingHandlerAdapter來(lái)替換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時(shí),返回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. 在請(qǐng)求處理方法中添加@ResponseBody注解,將返回結(jié)果直接轉(zhuǎn)換成JSON

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

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

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

5. 解決JSON格式化問(wèn)題

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

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

總結(jié)

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

相關(guān)文章

  • 解析Java中PriorityQueue優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的源碼及用法

    解析Java中PriorityQueue優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的源碼及用法

    優(yōu)先級(jí)隊(duì)列是一種隊(duì)列結(jié)構(gòu),是0個(gè)或多個(gè)元素的集合,每個(gè)元素都有一個(gè)優(yōu)先權(quán),PriorityQueue被內(nèi)置于JDK中,本文就來(lái)解析Java中PriorityQueue優(yōu)先級(jí)隊(duì)列結(jié)構(gòu)的源碼及用法.
    2016-05-05
  • JDBC操作數(shù)據(jù)庫(kù)的增加、刪除、更新、查找實(shí)例分析

    JDBC操作數(shù)據(jù)庫(kù)的增加、刪除、更新、查找實(shí)例分析

    這篇文章主要介紹了JDBC操作數(shù)據(jù)庫(kù)的增加、刪除、更新、查找方法,以完整實(shí)例形式分析了Java基于JDBC連接數(shù)據(jù)庫(kù)及進(jìn)行數(shù)據(jù)的增刪改查等技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 提升性能秘密武器Java Unsafe類(lèi)面試精講

    提升性能秘密武器Java Unsafe類(lèi)面試精講

    這篇文章主要為大家介紹了提升性能秘密武器Java Unsafe類(lèi)面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Sharding-Jdbc如何配置主從讀寫(xiě)分離模式

    Sharding-Jdbc如何配置主從讀寫(xiě)分離模式

    文章介紹了如何使用Sharding-JDBC實(shí)現(xiàn)MySQL的讀寫(xiě)分離,通過(guò)配置主從數(shù)據(jù)源和讀寫(xiě)分離策略,可以在項(xiàng)目中實(shí)現(xiàn)高效的數(shù)據(jù)庫(kù)讀寫(xiě)操作,同時(shí),文章還提到解決MySQL連接異常的一個(gè)常見(jiàn)方法
    2025-03-03
  • springboot項(xiàng)目中沒(méi)有識(shí)別到y(tǒng)ml文件解決辦法

    springboot項(xiàng)目中沒(méi)有識(shí)別到y(tǒng)ml文件解決辦法

    這篇文章主要給大家介紹了springboot項(xiàng)目中沒(méi)有識(shí)別到y(tǒng)ml文件解決辦法,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • SpringData Repository Bean方法定義規(guī)范代碼實(shí)例

    SpringData Repository Bean方法定義規(guī)范代碼實(shí)例

    這篇文章主要介紹了SpringData Repository Bean方法定義規(guī)范代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • mybatis plus使用redis作為二級(jí)緩存的方法

    mybatis plus使用redis作為二級(jí)緩存的方法

    這篇文章主要介紹了mybatis plus使用redis作為二級(jí)緩存的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Spring自動(dòng)裝配與掃描注解代碼詳解

    Spring自動(dòng)裝配與掃描注解代碼詳解

    這篇文章主要介紹了Spring自動(dòng)裝配與掃描注解代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 基于Java判斷網(wǎng)絡(luò)是否正常代碼實(shí)例

    基于Java判斷網(wǎng)絡(luò)是否正常代碼實(shí)例

    這篇文章主要介紹了基于Java判斷網(wǎng)絡(luò)是否正常代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • sentinel流量控制框架(目錄設(shè)置)

    sentinel流量控制框架(目錄設(shè)置)

    Sentinel?是面向分布式服務(wù)架構(gòu)的高可用流量防護(hù)組件幫助開(kāi)發(fā)者保障微服務(wù)的穩(wěn)定性,本文重點(diǎn)給大家介紹sentinel流量控制框架的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-03-03

最新評(píng)論

东莞市| 韩城市| 赤峰市| 通州市| 富源县| 抚州市| 突泉县| 禹州市| 凤阳县| 福贡县| 垣曲县| 夏河县| 博湖县| 漾濞| 凤城市| 刚察县| 剑阁县| 新余市| 敖汉旗| 汕尾市| 吉木乃县| 贺兰县| 黄梅县| 陇川县| 偏关县| 东乡县| 江西省| 类乌齐县| 舒城县| 澄迈县| 涪陵区| 桐梓县| 芒康县| 晋宁县| 丰顺县| 张家界市| 双辽市| 读书| 安康市| 永新县| 西乌珠穆沁旗|