一般在SpringBoot中需要处理的异常有下面几种类型:
- 404
- 500
- 业务异常(JSON数据)
404 一般由默认的error页面处理
原理:由于SpringBoot中默认设置是由templates下面的error来处理404
而500则由@ControllerAdvice(控制器增强)处理
原理:@ControllerAdvice注解是统一处理贴有@Controller注解的控制器抛出的异常,这个相当于控制器的切面
具体代码如下:
import cn.wolfcode.p2p.base.util.JSONResult;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @所属项目 : springboot-ssm
* @类的描述 : 异常统一处理
* @类的作者 : JOHN
* @创建时间 : 2018年11月21日 10时43分
*/
@ControllerAdvice
public class ErrorControllerAdvice {
//只会针对指定的异常类型做处理
@ExceptionHandler(CustomerException.class)
@ResponseBody
public JSONResult handleJSONException(Exception ex, Model model){
JSONResult jsonResult = new JSONResult();
jsonResult.mark(ex.getMessage());
return jsonResult;
}
//只会针对指定的异常类型做处理
@ExceptionHandler(RuntimeException.class)
public String handle(Exception ex,Model model){
model.addAttribute("ex",ex.getMessage());
return "public/error/500";
}
}
至于抛出的JSON格式的异常,上面已经给出
但是可以看到的是:由于JSON格式的异常一般都是业务异常,所以:
还需要定义一个业务异常,业务异常如下:
/**
* @所属项目 : springboot-ssm
* @类的描述 : 客户异常
* @类的作者 : JOHN
* @创建时间 : 2018年11月21日 10时56分
* @说明 : 专门提供给用户的异常信息
*/
public class CustomerException extends RuntimeException{
public CustomerException(String message) {
super(message);
}
public CustomerException(String message, Throwable cause) {
super(message,cause);
}
}