一、首先自定義一個異常攔截器
1、攔截異常所有 及攔截 Exception異常
package com.cg.demo.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* 說明:
*
* @auther panhh
* @date 2019/7/12 9:37
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
//捕獲所有異常 獲取內部異常處理類:Exception
private static final Logger LOG = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = Exception.class)
public Map excption(Exception e, HttpServletRequest request){
String eMessage = e.getMessage();
StringBuffer url = request.getRequestURL();
System.out.println("ErrorMsg-->"+eMessage);
System.out.println("url-->"+url);
//打印日志
LOG.error("錯誤信息-->"+eMessage+"===請求鏈接--->"+url);
HashMap<Object, Object> hashMap = new HashMap<>();
hashMap.put("msg",eMessage);
hashMap.put("url",url);
return hashMap;
}
}
2、效果測試
@Controller
public class ExcTestController {
@RequestMapping("/test")
@ResponseBody
public String test(){
int a = 4/0;
return "test";
}
}
2、攔截器效果(控制台打印)
ErrorMsg-->/ by zero
url-->http://localhost:8080/test
2019-07-12 09:59:11.124 ERROR 10096 --- [nio-8080-exec-5] c.c.d.exception.GlobalExceptionHandler : 錯誤信息-->/ by zero===請求鏈接--->http://localhost:8080/test
3、頁面返回內容:
{"msg":"/ by zero","url":"http://localhost:8080/test"}
二、自定義一個異常,自定義異常需要自己拋出
1、自定義一個異常
package com.cg.demo.exception;
import lombok.Data;
import lombok.ToString;
/**
* 說明:
*
* @auther panhh
* @date 2019/7/12 9:36
*/
@Data
@ToString
public class GlobalException extends RuntimeException {
private String msg;
private Integer code;
public GlobalException(String msg, Integer code) {
this.msg = msg;
this.code = code;
}
}
2、異常攔截器攔截方法
private static final Logger LOG = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = GlobalException.class)
public Map myExcption(GlobalException e, HttpServletRequest request){
String eMessage = e.getMsg();
Integer code = e.getCode();
StringBuffer url = request.getRequestURL();
System.out.println("ErrorMsg-->"+eMessage);
System.out.println("url-->"+url);
//打印日志
LOG.error("錯誤信息-->"+eMessage+"===請求鏈接--->"+url+"錯誤狀態碼--->"+code);
HashMap<Object, Object> hashMap = new HashMap<>();
hashMap.put("msg",eMessage);
hashMap.put("code",code);
hashMap.put("url",url);
return hashMap;
}
3、測試
(1)
@Controller
public class ExcTestController {
@RequestMapping("/test")
@ResponseBody
public String test() {
throw new GlobalException("拋出一個自定義異常",4001);
}
}
(2)攔截器打印內容
ErrorMsg-->拋出一個自定義異常
url-->http://localhost:8080/test
2019-07-12 10:14:01.155 ERROR 10132 --- [nio-8080-exec-1] c.c.d.exception.GlobalExceptionHandler : 錯誤信息-->拋出一個自定義異常===請求鏈接--->http://localhost:8080/test錯誤狀態碼--->4001
(3)前台頁面返回
{"msg":"拋出一個自定義異常","code":4001,"url":"http://localhost:8080/test"}
三、補充,可以自定義一個返回信息枚舉類
1、自定義一個枚舉類
package com.cg.demo.exception;
import lombok.Data;
/**
* 說明:
*
* @auther panhh
* @date 2019/7/12 10:21
*/
public enum ResponseEnum {
SUCCESS(200,"操作成功"),
ERROR(400,"操作失敗"),
;
private Integer code;
private String msg;
ResponseEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2、自定義異常類修改 GlobalException為
package com.cg.demo.exception;
import lombok.Data;
import lombok.ToString;
/**
* 說明:
*
* @auther panhh
* @date 2019/7/12 9:36
*/
@Data
@ToString
public class GlobalException extends RuntimeException {
private ResponseEnum responseEnum;
//添加一個構造函數
public GlobalException(ResponseEnum re){
this.responseEnum = re;
}
}
3、異常攔截器攔截方法修改為
private static final Logger LOG = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(value = GlobalException.class)
public Map myExcption(GlobalException e, HttpServletRequest request){
ResponseEnum re = e.getResponseEnum();
String eMessage = re.getMsg();
Integer code = re.getCode();
StringBuffer url = request.getRequestURL();
System.out.println("ErrorMsg-->"+eMessage);
System.out.println("code-->"+code);
System.out.println("url-->"+url);
//打印日志
LOG.error("錯誤信息-->"+eMessage+"===請求鏈接--->"+url+"錯誤狀態碼--->"+code);
HashMap<Object, Object> hashMap = new HashMap<>();
hashMap.put("msg",eMessage);
hashMap.put("code",code);
hashMap.put("url",url);
return hashMap;
}
4、異常演示
(1)、拋出一個異常
@Controller
public class ExcTestController {
@RequestMapping("/test")
@ResponseBody
public String test() {
throw new GlobalException(ResponseEnum.ERROR);
}
}
(2)、攔截器方法打印的內容
ErrorMsg-->操作失敗
code-->400
url-->http://localhost:8080/test
019-07-12 10:31:06.281 ERROR 4764 --- [nio-8080-exec-1] c.c.d.exception.GlobalExceptionHandler : 錯誤信息-->操作失敗===請求鏈接--->http://localhost:8080/test錯誤狀態碼--->400
(3)、前台頁面返回內容
{"msg":"操作失敗","code":400,"url":"http://localhost:8080/test"}
四、pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cg.demo</groupId>
<artifactId>some_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>some_demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!--Aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
五、本文到這里就結束了,奮斗越久越划算,工資變成零花錢 ,希望你不忘初心,繼續努力哈!