这篇文章主要总结在SpringBoot中如何处理统一的异常,然后将异常信息返回到指定的页面。
(1)统一异常处理类
package com.liutao.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* 统一异常处理类
*
* @author LIUTAO
* @version 2017/4/25
* @see
* @since
*/
@ControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
public static final String DEFAULT_ERROR_VIEW = "error";
@ExceptionHandler(value = Exception.class)
public ModelAndView defaultExceptionHandle(HttpServletRequest req, Exception e){
logger.debug("enter error handler");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("Exception",e);
modelAndView.addObject("url",req.getRequestURL());
modelAndView.setViewName(DEFAULT_ERROR_VIEW);
logger.debug("outer error handler");
return modelAndView;
}
}
上面的类上应该添加@ControllerAdvice注解来使此类变成异常处理类。
(2)测试Controller
package com.liutao.controller;
import com.wordnik.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
/**
* 用户控制层
*
* @author LIUTAO
* @version 2017/3/29
* @see
* @since
*/
@Controller
@Api(value = "test")
@RequestMapping("/liutao/v1")
public class UserController {
private Logger logger = LoggerFactory.getLogger(UserController.class);
@ResponseBody
@RequestMapping(value = "/test/exception/handler",method = RequestMethod.GET)
public Map<String,Object> testWxceptionHandler() throws Exception {
throw new Exception("test exception handle");
}
}
(3)异常显示页面
<!DOCTYPE HTML>
<html lang="en">
<head>
<title>index</title>
<meta content="text/html; charset=UTF-8" />
</head>
<body>
error message:<br/>
url:<p>${url}</p>
exception message:<p>${exception.message}</p>
</body>
</html>
运行以上程序就可以进行很好的统一异常处理。
详细代码请参考gitHub地址:ExceptionHandler