全局异常处理
package com.van.mall.common;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author Van
* @date 2020/3/24 - 10:49
*/
@Slf4j
@ControllerAdvice
public class ExceptionHandler {
@org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class)
@ResponseBody
public ServerResponse handler(Exception e){
log.error("system error",e);
return ServerResponse.error("zero can divide");
}
}
解释:
@ControllerAdvice 用来标识它是一个处理全局异常类
@ExceptionHandler 标识它要捕获哪个异常类,这里用的是Exception,说明只要是异常,全部都捕获(因为所有异常都是继承Exception)
@ResponseBody 标识,我要返回的是json而不是视图
其中在方法里面要加上Exception e 参数,因为遇到异常会在这个方法内传入这个参数。
自定义异常
package com.van.mall.common;
import lombok.Data;
/**
* @author Van
* @date 2020/3/24 - 10:55
*/
@Data
public class ZeroException extends RuntimeException {
private String message;
private int code;
public ZeroException(String message, int code) {
super(message);
this.code = code;
}
}
解释:
自定义异常就直接继承RuntimeException,它只需要两个成员,message和code,并且要get set,还有一个构造方法(其中构造方法super直接调用父类的构造方法,给message赋值)
使用的时候就直接throw new ZeroException(“0不能当除数”,-1)