在官方讲解中@ControllerAdvice 注解的作用是用来做异常处理。
然后,我们这些小白就懵逼了
package web.app.error;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import spring.beans.service.LogService;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import Log.Log;
@ControllerAdvice
public class ErrorController
{
@Resource(name="log_service")
private LogService log;
@ExceptionHandler({Exception.class})
public void exception(HttpServletResponse response,Exception e)
throws IOException
{
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
log.e(e.getMessage());
e.printStackTrace();
response.getWriter().println("errCode : error msg : " + e.getMessage());
}
}
exception 方法被@ExceptionHandler({Exception.class})修饰了这个 意为该方法可以处理所有异常类型(语法性错误不算哈,比如少写一个分号,少写分号是编译出错了。),毕竟所有的异常类都继承自Exception,参数HttpServletResponse 会被自动注入,Exception 同理也会被注入。
@Resource(name=”log_service”)这是另一个日志记录服务,不去管他,这篇文章只需要记住@ControllerAdvice 和 @ExceptionHandler 注解的用法就可以了。
在实际项目运行中,程序在运行的时候我们总得给自己留条后路,比如用户打开网页突然遇到一个空白页面或者是乱码体验感也不好吧。增强用户体验感,哪怕程序在运行中出了错,我们也可以通过这个提示用户网站正在维护,总比乱码,白板强。
如果我们更改exception的返回结果 如 String或者是ModelAndView 类型 也是会去解析相应的模版的。