Spring MVC处理异常

来源:互联网 发布:qt5串口编程实例 编辑:程序博客网 时间:2024/06/06 01:58

Spring MVC提供了一种定义明确的处理机制来管理应用程序抛出的异常。

主要思想:在控制器类中,使用@ExceptionHandler注解定义用于处理该异常的方法

语法:该注解可以接收异常类作为其value参数,比如@ExceptionHandler(UserNotFoundException.class)  其中UserNotFoundException是自定义的异常类,也可以指定处理多个异常类,比如这样@ExceptionHandler(value = {MissingServletRequestParameterException.class,BindException.class}),这样就会处理多个异常了。

用例:

Step1:定义一个扩展了Exception的自定义异常类UserNotFoundException

public class UserNotFoundException extends Exception {    public UserNotFoundException(String name){        super("User not found with name:"+name);    }}
Step2:控制器中定义使用注解@ExceptionHandler的处理器方法

@Controllerpublic class UserExceptionController {    private Map<String,UserException> users = new HashMap<String, UserException>();    @PostConstruct    public void setUsers(){        users.put("mert",new UserException("Mert","Caliskan"));        users.put("kenan",new UserException("Kenan","Sevindik"));    }    @RequestMapping("/formException")    public ModelAndView user(){        return new ModelAndView("userException","userException",new UserException());    }    @RequestMapping("/resultException")    public ModelAndView process(String name)throws Exception{        System.out.println(name);        ModelAndView modelAndView = new ModelAndView();        UserException userException = users.get(name);        if ("johndoe".equals(name)){            throw new Exception();        }        if(userException==null){            System.out.println("In userException");            throw new UserNotFoundException(name);        }        modelAndView.addObject("userException",userException);        modelAndView.setViewName("userExceptionResult");        return modelAndView;    }    @ExceptionHandler    public ModelAndView handleException(UserNotFoundException e){        ModelAndView modelAndView = new ModelAndView("errorUser");        modelAndView.addObject("errorMessage",e.getMessage());        return modelAndView;    }}

注意:这个只会是在当前的Controller里面起作用。一般来说应该在一个公共的中心位置处理异常,所以创建一个可以处理异常的全局方法就显得很有必要。Spring MVC提供了另一个注解@ControllerAdvice来完成该目的。使用注解@ControllerAdvice的类可以使用包含使用@ExceptionHandler、@InitBinder和@ModelAttribute注解的方法,而这些方法可以用于应用程序中使用@RequestMapping注解的所有方法。更通用的异常(比如SQLException或IOException)则可以在一个全局控制器中处理。

比如上述用户搜索关键字johndoe时,使用了java.lang.Exception类。全局控制器包含了处理该异常的方法

@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(Exception.class)    public ModelAndView handleException(){        return new ModelAndView("errorGlobal");    }}

0 0
原创粉丝点击