當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringMVC异常处理 自定义异常
生活随笔
收集整理的這篇文章主要介紹了
SpringMVC异常处理 自定义异常
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
異常處理器
實現(xiàn)HandlerExceptionResolver接口(異常處理器)
@Component // 配上注解Spring看到實現(xiàn)了這個接口就知道是異常處理器了 public class ExceptionResolver implements HandlerExceptionResolver {public ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) {System.out.println("異常處理器正在執(zhí)行中");ModelAndView modelAndView = new ModelAndView();//定義異?,F(xiàn)象出現(xiàn)后,反饋給用戶查看的信息modelAndView.addObject("msg","出錯啦! ");//定義異常現(xiàn)象出現(xiàn)后,反饋給用戶查看的頁面modelAndView.setViewName("error.jsp");return modelAndView;} }根據(jù)異常的種類不同,進行分門別類的管理,返回不同的信息
public class ExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) {System.out.println("my exception is running ...."+ex);ModelAndView modelAndView = new ModelAndView();if( ex instanceof NullPointerException){modelAndView.addObject("msg","空指針異常");}else if ( ex instanceof ArithmeticException){modelAndView.addObject("msg","算數(shù)運算異常");}else{modelAndView.addObject("msg","未知的異常");}modelAndView.setViewName("error.jsp");return modelAndView;} }注解開發(fā)異常處理器:
使用注解實現(xiàn)異常分類管理
- 名稱: @ControllerAdvice
- 類型: 類注解
- 位置:異常處理器類上方
- 作用:設(shè)置當(dāng)前類為異常處理器類
使用注解實現(xiàn)異常分類管理
- 名稱: @ExceptionHandler
- 類型: 方法注解
- 位置:異常處理器類中針對指定異常進行處理的方法上方
- 說明:處理器方法可以設(shè)定多個
異常分類:
工作中肯定是不能直接去定義一個異常類,然后挨個匹配異常,可能不同的異常給用戶展示 寫到死。
業(yè)務(wù)異常:
- 發(fā)送對應(yīng)消息傳遞給用戶,提醒規(guī)范操作
系統(tǒng)異常:
- 發(fā)送固定消息傳遞給用戶,安撫用戶
- 發(fā)送特定消息給運維人員,提醒維護
- 記錄日志
其他異常:
- 發(fā)送固定消息傳遞給用戶,安撫用戶
- 發(fā)送特定消息給編程人員,提醒維護
- 納入預(yù)期范圍內(nèi)
- 記錄日志
自定義異常
用戶行為異常類
//自定義異常繼承RuntimeException,覆蓋父類所有的構(gòu)造方法 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);}public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);} }系統(tǒng)異常:
//自定義異常繼承RuntimeException,覆蓋父類所有的構(gòu)造方法 public class SystemException extends RuntimeException {public SystemException() {}public SystemException(String message) {super(message);}public SystemException(String message, Throwable cause) {super(message, cause);}public SystemException(Throwable cause) {super(cause);}public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);} }自定義異常觸發(fā)類
@Controller public class UserController {@RequestMapping("/save")@ResponseBodypublic List<User> save(@RequestBody User user) {System.out.println("user controller save is running ...");//模擬業(yè)務(wù)層發(fā)起調(diào)用產(chǎn)生了異常 // int i = 1/0; // String str = null; // str.length();//對用戶的非法操作進行判定,并包裝成異常對象進行處理,便于統(tǒng)一管理if(user.getName().trim().length() < 8){throw new BusinessException("對不起,用戶名長度不滿足要求,請重新輸入!");}if(user.getAge() < 0){throw new BusinessException("對不起,年齡必須是0到100之間的數(shù)字!");}if(user.getAge() > 100){throw new SystemException("服務(wù)器連接失敗,請盡快檢查處理!");}User u1 = new User();u1.setName("Tom");u1.setAge(3);User u2 = new User();u2.setName("Jerry");u2.setAge(5);ArrayList<User> al = new ArrayList<User>();al.add(u1);al.add(u2);return al;} }Ajax處理
<%@page pageEncoding="UTF-8" language="java" contentType="text/html;UTF-8" %><a href="javascript:void(0);" id="testException">訪問springmvc后臺controller,傳遞Json格式POJO</a><br/><script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script><script type="text/javascript">$(function () {$("#testException").click(function(){$.ajax({contentType:"application/json",type:"POST",url:"save",/*通過修改參數(shù),激活自定義異常的出現(xiàn)*/// name長度低于8位出現(xiàn)業(yè)務(wù)異常// age小于0出現(xiàn)業(yè)務(wù)異常// age大于100出現(xiàn)系統(tǒng)異常// age類型如果無法匹配將轉(zhuǎn)入其他類別異常data:'{"name":"Jock","age":"111"}',dataType:"text",//回調(diào)函數(shù)success:function(data){alert(data);}});});}); </script>通過自定義異常將所有的異?,F(xiàn)象進行分類管理,以統(tǒng)一的格式對外呈現(xiàn)異常消息,部分異常是面向用戶,部分是面向內(nèi)部的,比如說服務(wù)器出現(xiàn)了故障,告訴用戶出錯了就行了,不需要顯示具體的原因,然后發(fā)送異常給內(nèi)部人員進行處理操作
總結(jié)
以上是生活随笔為你收集整理的SpringMVC异常处理 自定义异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java——多线程使用详解
- 下一篇: gradle idea java ssm