日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC异常处理 自定义异常

發(fā)布時間:2025/3/15 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)前類為異常處理器類
@Component @ControllerAdvice public class ExceptionAdvice { }

使用注解實現(xiàn)異常分類管理

  • 名稱: @ExceptionHandler
  • 類型: 方法注解
  • 位置:異常處理器類中針對指定異常進行處理的方法上方
  • 說明:處理器方法可以設(shè)定多個
@Component // 異常類只能有一個,多個的情況會都執(zhí)行,會報錯 @ControllerAdvice public class ExceptionAdvice {// 可以根據(jù)不同的異常 寫多個異常方法@ExceptionHandler(NullPointerException.class)// 調(diào)用異常名@ResponseBody // 只讓結(jié)果返回的是字符串類型的,否則會直接去匹配頁面public String doOtherException(Exception ex){ // 寫上參數(shù)可以拿到具體的參數(shù)return "出錯啦,請聯(lián)系管理員! ";} }

異常分類:

工作中肯定是不能直接去定義一個異常類,然后挨個匹配異常,可能不同的異常給用戶展示 寫到死。

業(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。