JPA|springboot个人博客的构建(1)异常处理

工程如下所示:
JPA|springboot个人博客的构建(1)异常处理
文章图片

【JPA|springboot个人博客的构建(1)异常处理】
error页面:

错误 错误

web里面的Controller
package com.mjf.blog.web; import com.mjf.blog.NotFoundException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class IndexController{@GetMapping("/") public String index(){ //int i=9/0; String blog=null; if (blog==null){ throw new NotFoundException("博客不存在"); //原本跳到NotFoundException这个类,然后通过这个返回404,可是在统一拦截那块,被拦截,所以在拦截那个方法里面添加一个判断条件。 } return "index"; } @GetMapping("/blog") public String blog(){ return "blog"; } }

handler页面:
package com.mjf.blog.handler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.AnnotationUtils; 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.ResponseStatus; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; /** * 自定义拦截异常,统一异常处理 */ @ControllerAdvice public class ControllerExceptionHandler { private final Logger logger= LoggerFactory.getLogger(this.getClass()); @ExceptionHandler(Exception.class) //访问哪个路径的问题 public ModelAndView exceptionHandler(HttpServletRequest request,Exception e) throws Exception { ///第一个参数 打印异常的地址,第二个是打印异常的信息 logger.error("Request URL : {}, Exception : {}",request.getRequestURL(),e); //判断 如果前台需要打印404,或者505,就让它通过这个条件来自己打印错误404.html网页。而不是统一异常处理。 if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class)!=null){ throw e; } ModelAndView mv=new ModelAndView(); mv.addObject("url",request.getRequestURL()); mv.addObject("exception",e); mv.setViewName("error/error"); return mv; }}

    推荐阅读