前言
@ControllerAdvice 使类成为全局的异常处理类;
且只有是以@RequestMapping注解的Contoller才会触发这个类;
类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常,每一个@ExceptionHandler 我们可以使之只处理一类或多类异常
异常处理
/**全局异常处理类
*Created by fh on 2018-4-20
*/
public class GlobalException extends Exception{
private Integer code;
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public GlobalException()
{
super();
}
public GlobalException(String msg)
{
super(msg);
}
public GlobalException(String msg,Integer code) {
super(msg);
this.code = code;
}
public GlobalException(Integer code,String msg,Object data) {
super(msg);
this.code = code;
this.data = data;
}
}
import com.zy.drug.webapi.web.vo.ResultVo;
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.servlet.config.annotation.EnableWebMvc;
import javax.servlet.http.HttpServletRequest;
/**异常处理器类
*@EnableWebMvc 启用MVC Java config 或 MVC XML namespace
*@ControllerAdvice 将所有控制器(Controller)增强,与@ExceptionHandler结合实现异常处理
* 类中可配置多中异常处理
* Created by fh on 2018-4-20
*/
@ControllerAdvice
@EnableWebMvc
public class GlobalExceptionHandler {
/**抛出GlobalException异常时执行
* @ExceptionHandler 把异常处理器应用到所有控制器(应用到所有@RequestMapping注解的方法)在其抛出GlobalException异常时执行
* @param req
* @param e
* @return
*/
@ExceptionHandler({GlobalException.class})
@ResponseBody
public ResultVo globalException(HttpServletRequest req, GlobalException e){
return ResultVo.fail(e.getCode(),e.getMessage(),e.getData());
}
/**抛出GlobalRunTimeException异常时执行
* @ExceptionHandler 把异常处理器应用到所有控制器(应用到所有@RequestMapping注解的方法)在其抛出GlobalRunTimeException异常时执行
* @param req
* @param e
* @return
*/
@ExceptionHandler(GlobalRunTimeException.class)
@ResponseBody
public ResultVo gGlobalRunTimeException(HttpServletRequest req, GlobalRunTimeException e){
return ResultVo.fail(e.getCode(),e.getMessage(),e.getData());
}
/**若是没有指定抛出具体异常,则会调用这个方式,
* @ExceptionHandler 把异常处理器应用到所有控制器(应用到所有*@RequestMapping注解的方法)
* @param req
* @param e
* @return
*/
@ExceptionHandler({Exception.class})
@ResponseBody
public ResultVo exception(HttpServletRequest req, Exception e){
return ResultVo.fail(80001,"系统异常:"+e.getMessage(),null);
}
/**若是没有指定抛出Error具体异常,则会调用这个方式
* @ExceptionHandler 把异常处理器应用到所有控制器(应用到所有@RequestMapping注解的方法)
* @param req
* @param e
* @return
*/
@ExceptionHandler({Error.class})
@ResponseBody
public ResultVo errorException(HttpServletRequest req, Error e){
return ResultVo.fail(80001,\"系统异常:\"+e.getMessage(),null);
}
}