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

SpringMVC全局異常處理小結(jié)

 更新時間:2024年03月29日 14:26:29   作者:周大福ye  
在開發(fā)中,不管是dao層、service層還是controller層,都有可能拋出異常,在springmvc中,能將所有類型的異常處理從各處理過程解耦出來,既保證了相關(guān)處理過程的功能較單一,也實現(xiàn)了異常信息的統(tǒng)一處理和維護(hù),本文介紹SpringMVC全局異常處理,感興趣的朋友一起看看吧

一、為什么要全局異常處理?

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

二、異常處理思路(參考下圖)

三、SpringMVC異常分類

   1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver; 
   2)實現(xiàn)Spring的異常處理接口HandlerExceptionResolver自定義自己的異常處理器;
   3)使用@ControllerAdvice + @ExceptionHandler

四、綜合案例

1、首先創(chuàng)建一個error頁面,為方便后面異常處理操作

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>
    系統(tǒng)錯誤,請聯(lián)系管理員?。?
</h1>
${msg}
</body>
</html>

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

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

1)配置SpringMVC簡單異常處理器

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

2)方法中拋出此異常

 /**
     * 返回實體類的JSON數(shù)據(jù)
     * @param bookId
     * @return
     */
   @RequestMapping("/querySingleBook")
   @ResponseBody
   public Book querySingleBook(Integer bookId){
       Book book = bookService.selectByPrimaryKey(bookId);
       book.setCreatedate(new Date());
       //此處只是為了進(jìn)行案例演示
       if(bookId<100){
           throw new RuntimeException("查詢的書本編號小于100,異常拋出??!");
       }
       return book;
   }

3)頁面效果

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

   注:
   1)通過instanceof判斷異常類型
   2)通過設(shè)置mv.setView(new MappingJackson2JsonView())方式返回JSON數(shù)據(jù);

 1)通過HandlerExceptionResovler接口實現(xiàn)全局異常處理器

package com.zking.ssm.book.exception;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * SpingMVC提供的第二種全局異常處理方式  ,實現(xiàn)HandlerExceptionResolver接口
 */
@Component
public class GlobalException implements HandlerExceptionResolver {
    /**
     *
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o 異常處理的目標(biāo)
     * @param e 異常處理的類型
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView mv=new ModelAndView();
        mv.setViewName("error");
        //判斷異常的分類
        if(e instanceof RuntimeException){
                RuntimeException ex=(RuntimeException)e;
                System.out.println(ex.getMessage());
                mv.addObject("msg",ex.getMessage());
        }
        return mv;
    }
}

2)創(chuàng)建異常類

package com.zking.ssm.book.exception;
public class BusinessException extends RuntimeException {
    public BusinessException() {
    }
    public BusinessException(String message) {
        super(message);
    }
    public BusinessException(String message, Throwable cause) {
        super(message, cause);
    }
    public BusinessException(Throwable cause) {
        super(cause);
    }
}
@RequestMapping("/querySingleBook")
    @ResponseBody
    public Book querySingleBook(Integer bookId){
        Book book = bookService.selectByPrimaryKey(bookId);
        if(bookId>100)
            throw new BusinessException("書本編號小于100,異常拋出!??!");
        book.setDate(new Date());
        return book;
    }

3)頁面效果

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

 1)創(chuàng)建全局異常處理器

package com.zking.ssm.book.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import java.util.HashMap;
import java.util.Map;
/**
 * SpingMVC提供的第三種種全局異常處理方式
 * 1)@ControllerAdvice +@ExceptionHandler
 * 2)@RestControllerAdvice +@ExceptionHandler
 *      @RestControllerAdvice ==@Controller +@ResponseBody 返回JSON的數(shù)據(jù)格式,繞開視圖解析器
 */
@ControllerAdvice
public class GlobalException2{
        @ExceptionHandler
        public ModelAndView exceptionHandler(Exception e){
            ModelAndView mv=new ModelAndView();
            //設(shè)置錯誤頁面
            mv.setViewName("error");
            //判斷異常類型
            if(e instanceof BusinessException){
            BusinessException ex=(BusinessException)e;
                mv.addObject("msg","系統(tǒng)繁忙,請稍后再試.......");
            }
            mv.setView(new MappingJackson2JsonView());
            return mv;
        }
}

2)頁面效果

3)返回異常信息和狀態(tài)碼、返回JSON數(shù)據(jù)格式

package com.zking.ssm.book.exception;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
import java.util.HashMap;
import java.util.Map;
/**
 * SpingMVC提供的第三種種全局異常處理方式
 * 1)@ControllerAdvice +@ExceptionHandler
 * 2)@RestControllerAdvice +@ExceptionHandler
 *      @RestControllerAdvice ==@Controller +@ResponseBody 返回JSON的數(shù)據(jù)格式,繞開視圖解析器
 */
@RestControllerAdvice
public class GlobalException2{
        @ExceptionHandler
        public Map<String, Object> exceptionHandler(Exception e){
            Map<String, Object> json=new HashMap();
            //判斷異常類型
            if(e instanceof BusinessException){
                json.put("msg","系統(tǒng)繁忙,請稍后再試.......");
                json.put("code",500);
            }
            return json;
        }
}

4)頁面效果

 希望可以給您帶來幫助,若有建議可以私信作者哦~

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

相關(guān)文章

  • 多線程(多窗口賣票實例講解)

    多線程(多窗口賣票實例講解)

    下面小編就為大家?guī)硪黄嗑€程(多窗口賣票實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • springboot配置多數(shù)據(jù)源后mybatis攔截器失效的解決

    springboot配置多數(shù)據(jù)源后mybatis攔截器失效的解決

    這篇文章主要介紹了springboot配置多數(shù)據(jù)源后mybatis攔截器失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中圖像銳化操作的方法詳解

    Java中圖像銳化操作的方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中圖像銳化操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 在Spring MVC中處理請求參數(shù)的方法總結(jié)

    在Spring MVC中處理請求參數(shù)的方法總結(jié)

    在Spring MVC中處理請求參數(shù)是通過使用各種注解來實現(xiàn)的,本文給大家介紹了在Spring MVC中處理不同類型請求參數(shù)的方法,并通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 基于java中反射的總結(jié)分析

    基于java中反射的總結(jié)分析

    所謂反射,就是根據(jù)一個已經(jīng)實例化了的對象來還原類的完整信息
    至少對我而言,我認(rèn)為它帶給我的好處是,讓我從下往上的又了解了一遍面向?qū)ο?/P>

    2013-05-05
  • Mybatis-Plus根據(jù)自定義注解實現(xiàn)自動加解密的示例代碼

    Mybatis-Plus根據(jù)自定義注解實現(xiàn)自動加解密的示例代碼

    我們把數(shù)據(jù)存到數(shù)據(jù)庫的時候,有些敏感字段是需要加密的,從數(shù)據(jù)庫查出來再進(jìn)行解密,如果我們使用的是Mybatis框架,那就跟著一起探索下如何使用框架的攔截器功能實現(xiàn)自動加解密吧,需要的朋友可以參考下
    2024-06-06
  • java如何獲得redis所有的key-value

    java如何獲得redis所有的key-value

    這篇文章主要介紹了java如何獲得redis所有的key-value,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 解決報java.lang.AssertionError錯誤的問題

    解決報java.lang.AssertionError錯誤的問題

    這篇文章主要介紹了解決報java.lang.AssertionError錯誤的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Nacos?Discovery服務(wù)治理解決方案

    Nacos?Discovery服務(wù)治理解決方案

    DiscoveryClient是專門負(fù)責(zé)服務(wù)注冊和發(fā)現(xiàn)的,我們可以通過它獲取到注冊到注冊中心的所有服務(wù),這篇文章主要介紹了Nacos?Discovery服務(wù)治理,需要的朋友可以參考下
    2022-11-11
  • Java線上死鎖問題從定位到解決的全鏈路指南

    Java線上死鎖問題從定位到解決的全鏈路指南

    在分布式系統(tǒng)高并發(fā)場景下,死鎖如同定時炸彈,隨時可能引發(fā)服務(wù)雪崩,本文將分享一套完整的死鎖應(yīng)對策略,結(jié)合實戰(zhàn)案例與生產(chǎn)級解決方案,助你快速化解危機,需要的朋友可以參考下
    2025-06-06

最新評論

海口市| 皮山县| 焦作市| 和林格尔县| 涞水县| 和田县| 丘北县| 大洼县| 盘锦市| 新邵县| 鄯善县| 舒兰市| 广饶县| 怀柔区| 井研县| 广河县| 吴桥县| 侯马市| 三门县| 三门峡市| 苍溪县| 噶尔县| 买车| 临海市| 黔西县| 宣汉县| 三穗县| 眉山市| 洱源县| 兴仁县| 临湘市| 内丘县| 宝鸡市| 漳平市| 油尖旺区| 枝江市| 阳城县| 乐至县| 根河市| 壤塘县| 莫力|