株洲網(wǎng)站seo優(yōu)化價(jià)格鄭州高端網(wǎng)站建設(shè)哪家好
AOP全局異常處理
由于Controller可能接收到來(lái)自業(yè)務(wù)層、數(shù)據(jù)層、數(shù)據(jù)庫(kù)拋出的異常,因此需要使用AOP思想,進(jìn)行全局異常處理,異常可通過(guò)調(diào)試獲得。
package org.sinian.reggie.common;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import java.sql.SQLIntegrityConstraintViolationException;@ControllerAdvice(annotations = {RestController.class, Controller.class})//表示這是一個(gè)aop通知類,做功能增強(qiáng)。
@ResponseBody//類中方法返回值將以JSON格式返回給前端。
@Slf4j//日志記錄
public class GlobalExceptionHandler {@ExceptionHandler(SQLIntegrityConstraintViolationException.class)//表明該方法為一個(gè)異常處理器。public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){log.error(ex.getMessage());if(ex.getMessage().contains("Duplicate entry")){String[] split = ex.getMessage().split(" ");String msg = split[2] + "已存在";return R.error(msg);}return R.error("未知錯(cuò)誤");}
}
-
(SQLIntegrityConstraintViolationException:
- 唯一性約束違反:嘗試插入已經(jīng)存在的唯一值(例如,違反了唯一索引)。
- 主鍵約束違反:嘗試插入重復(fù)的主鍵值。
- 外鍵約束違反:嘗試插入或更新關(guān)聯(lián)表的外鍵值,但沒(méi)有匹配的主鍵值。
- 檢查約束違反:嘗試插入或更新值,不滿足定義的檢查條件。
-
總結(jié):通過(guò)兩個(gè)注解實(shí)現(xiàn)全局異常處理
- @ControllerAdvice(annotations = {RestController.class, Controller.class})
- @ExceptionHandler(SQLIntegrityConstraintViolationException.class)