美文网首页
springMVC异常处理

springMVC异常处理

作者: 游牧族人 | 来源:发表于2018-05-06 16:12 被阅读22次

    Controller代码:

    @Controller
    @RequestMapping("/")
    public class LoginController {
    
        private LoginDao loginDao;
        @Autowired
        public LoginController(LoginDao loginDao){
            this.loginDao = loginDao;
        }
    
        @RequestMapping(value = "login", method = RequestMethod.POST)
        public String login(User user, Model model){
            // loginDao.print(user);
            // model.addAttribute("msg","hahaha");
            System.out.println(1/0);
           return "login";
        }
    }
    
    

    ExceptionHandler代码:

    @ControllerAdvice
    public class MyExceptionHandler {
       @ExceptionHandler(value = Exception.class)
       public String loginHandler(Exception e){
           System.out.println("异常处理!!");
           return "redirect:login.jsp";
       }
    }
    
    

    @ControllerAdvice+@ExceptionHandler实现全局异常处理。
    @ExecptionHandler注解表示该方法为异常处理方法,@ControllerAdvice注解表示该类中所有的标注@ExecptionHandler、@InitBinder,@ModelAttribute的方法都可以被应用到所有标注了@RequestMapping注解的方法中。
    在这种全局异常处理方式中,我们一定要在springmvc-serlet.xml中配置<mvc:annotation-driven />标签。
    <mvc:annotation-driven/>标签对应的解析类是org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser,这个标签的作用是向工厂中注册以下几个类:

    RequestMappingHandlerMapping-----------------(1)
    BeanNameUrlHandlerMapping--------------------(2)
    RequestMappingHandlerAdapter-----------------(3)
    HttpRequestHandlerAdapter--------------------(4)
    SimpleControllerHandlerAdapter---------------(5)
    ExceptionHandlerExceptionResolver------------(6)
    ResponseStatusExceptionResolver--------------(7)
    DefaultHandlerExceptionResolver--------------(8)
    

    (1)和(2)是HandlerMapping接口的实现类,用来处理请求映射。(1)是为了处理@RequestMapping注解,(2)会将controller类的名字映射为请求url。
    (3)(4)(5)用来处理请求条件,用来确定调用哪个controller的哪个方法来处理当前请求。(3)用来处理@Controller注解,支持自定义方法参数和返回值。(4)用来处理继承HttpRequestHandler的处理器。(5)用来处理继承自Controller接口的处理器。
    (6)(7)(8)是用来处理异常的解析器。其中的ExceptionHandlerExceptionResolver就是来处理@ExceptionHandler注解的, 因此若是不使用<mvc:annotation-driven/>标签,这种全局异常处理方式是不可用的

    相关文章

      网友评论

          本文标题:springMVC异常处理

          本文链接:https://www.haomeiwen.com/subject/ngeurftx.html