SpringBoot全局异常处理
spring boot 默认情况下会映射到 /error 进行异常处理,但是提示并不十分友好,下面自定义异常处理,提供友好展示。
1、编写自定义异常类:
package com.sam.demo.custom;
/**
* @author sam
* @since 2017/7/17
*/
public class MyException extends RuntimeException {
public MyException(String code, String msg) {
this.code = code;
this.msg = msg;
}
private String code;
private String msg;
// getter & setter
}
2、编写全局异常处理类
创建 MyControllerAdvice.java,如下:
CommonResult(ex.getCode(),ex.getMessage(),null);package com.sam.demo.controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* controller 增强器
*/
//controller层中 @RequestMapping注解的方法抛出异常,都会来这个类中进行匹配,建议配置一个捕获Exception的方法,最终未匹配的都能匹配到Exception异常
@ControllerAdvice
public class MyControllerAdvice {
/**
* 拦截捕捉自定义异常 MyException.class
* @param ex
* @return
*/
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@ExceptionHandler(value = MyException.class)
public CommonResult myErrorHandler(MyException ex) {
return new CommonResult(ex.getCode(),ex.getMessage(),null);
}
}
3、通用返回结果
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T>{
private Integer code;
private String message;
private T data;
}
4、controller中抛出异常进行测试。
@RequestMapping("/home")
public String home() throws Exception {
// throw new Exception("Sam 错误");
throw new MyException("101", "Sam 错误");
}