# :-: 異常處理
```
通常一個web框架中,有大量需要處理的異常。比如業務異常,權限不足等等。前端通過彈出提示信息的方式告訴用戶出了什么錯誤。 通常情況下我們用try.....catch....對異常進行捕捉處理,但是在實際項目中對業務模塊進行異常捕捉,會造成代碼重復和繁雜, 我們希望代碼中只有業務相關的操作,所有的異常我們單獨設立一個類來處理它。全局異常就是對框架所有異常進行統一管理。 我們在可能發生異常的方法里throw拋給控制器。然后由全局異常處理器對異常進行統一處理。 如此,我們的Controller中的方法就可以很簡潔了。
```
所謂全局異常處理器就是使用@ControllerAdvice注解。示例如下:
~~~
package com.hjf.common.exception;
import com.hjf.common.config.CodeUtil;
import com.hjf.common.base.BaseResp;
import com.hjf.common.util.JsonUtil;
import com.hjf.common.util.web.ResponseUtils;
import com.hjf.core.spring.WebUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
/**
* 全局異常處理類
*/
@ResponseBody
@ControllerAdvice
@Slf4j
public class MyControllerAdvice {
/**
* 參數校驗異常處理
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public BaseResp MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
// 從異常對象中拿到ObjectError對象
ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
// 然后提取錯誤提示信息進行返回
log.error("【參數校驗異常處理】"+objectError.getDefaultMessage());
return BaseResp.failMsg(objectError.getDefaultMessage());
}
/**
* 通用異常處理
*/
@ExceptionHandler(value = Exception.class)
public void errorHandle(Exception e){
log.error("【系統異常處理】"+e.getMessage());
Map<String,Object> map = new HashMap<String,Object>();
map.put("code", CodeUtil.error);
map.put("msg","抱歉系統發生了點小問題");
String json= JsonUtil.obj2Json(map);
ResponseUtils.renderJson(WebUtils.getResponse(), json);
}
// /**
// * 通用異常處理
// */
// @ExceptionHandler(value = Exception.class)
// public Map<String,Object> errorHandle(Exception e){
// log.error("【系統異常處理】"+e.getMessage());
// Map<String,Object> map = new HashMap<String,Object>();
// map.put("code", CodeUtil.error);
// map.put("msg","抱歉系統發生了點小問題");
// return map;
// }
// /**
// * 通用異常處理
// */
// @ExceptionHandler(value = CommonException.class)
// public Map<String,Object> commonErrorHandle(Exception e){
// log.error("【通用異常處理】"+e.getMessage());
// Map<String,Object> map = new HashMap<String,Object>();
// map.put("code", CodeUtil.error);
// map.put("msg",e.getMessage());
// return map;
// }
/**
* 通用異常處理
*/
@ExceptionHandler(value = CommonException.class)
public void commonErrorHandle(Exception e){
log.error("【通用異常處理】"+e.getMessage());
Map<String,Object> map = new HashMap<String,Object>();
map.put("code", CodeUtil.error);
map.put("msg",e.getMessage());
String json= JsonUtil.obj2Json(map);
ResponseUtils.renderJson(WebUtils.getResponse(), json);
}
}
~~~
- 項目介紹
- 項目聲明
- 項目簡介
- 架構設計
- 項目亮點功能介紹
- 技術棧介紹
- 核心功能
- 運行環境
- 項目更新日志
- 文檔更新日志
- F&Q
- 部署教程
- 環境準備
- JDK安裝
- JDK1.8,17共存
- maven
- 分布式緩存Redis
- 單機版
- 集群
- 注冊&配置中心alibaba/nacos
- 介紹
- Nacos安裝
- Nacos配置中心
- Nacos注冊發現
- Nacos生產部署方案
- 服務監控-BootAdmin
- 基本介紹
- 如何使用
- 整合Admin-Ui
- 客戶端配置
- 鏈路追蹤
- 基本介紹
- SkyWalking-1
- Skywalking-1
- 消息隊列
- Kafka
- docker安裝kafka
- Linux集群
- Maven私服
- nexus安裝部署
- nexus使用介紹
- 全文搜索elasticsearch
- windows集群搭建
- docker安裝es
- ElasticHD
- linux集群部署
- 統一日志解決方案
- 日志解決方案設計
- 介紹與相關資料
- ELK安裝部署
- elasticsearch 7.5
- logstash-7.5
- kibana-7.5
- filebeat
- 服務監控-Prometheus
- Prometheus安裝配置
- Prometheus介紹
- grafana
- 持續集成部署CICD
- 自動化部署Jenkins
- 安裝部署win
- 打包發布遠程執行
- 安裝部署linux
- jenkins+gitlab+docker容器化工程自動化部署
- Git
- CICD說明
- 阿里云效
- CentOS_MYSQL安裝
- docker
- 安裝
- Docker安裝Nginx
- Docker部署啟動springboot
- dockerCompose
- harbor
- Docker私有鏡像倉庫
- Portainer
- Docker遠程連接設置
- 打包工程
- 必要啟動模塊
- 核心模塊
- 登錄認證
- 緩存功能
- 日志模塊
- 分布式鎖
- 消息隊列
- 異常處理
- 系統接口
- 參數驗證
- es檢索
- 數據導出
- 系統設計
- 系統總體架構
- 擴展模塊(可選)
- 限流熔斷alibaba/sentinel
- 使用Sentinel實現gateway網關及服務接口限流
- Sentinel使用Nacos存儲規則及同步
- 服務調用Feign
- Feign基本介紹
- 如何使用
- 負載均衡
- 請求超時
- 請求攔截器
- 分布式任務調度
- XXL-JOB
- 分布式事務
- TX-LCN
- Seata
- Seata原理解析
- 數據庫分庫分表
- swagger文檔
- 分布式ID生成器解決方案
- 服務網關CloudGateway
- 基本介紹
- 使用網關
- 路由配置
- 全局過濾器
- 服務認證授權架構設計
- 認證服務流程
- 授權服務流程
- 系統冪等性設計與實踐
- 分布式日志鏈路跟蹤
- 實時搜索系統設計
- 應用性能
- 壓力測試工具
- Apache JMeter介紹和安裝
- ApacheJMeter使用
- JVM
- JVM性能調優
- 常見JVM內存錯誤及解決方案
- JVM 分析工具詳解
- Spring Cloud性能調優
- Linux運維
- Linux 常用命令
- Linux開啟端口