SpringMVC异常处理

332 阅读1分钟

前置小知识

request域绑定数据的三种方式

Map

@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
    // 向request域中存储数据
    map.put("testRequestScope", "在SpringMVC中使用Map接口实现request域数据共享");
    return "view";
}

Model

@RequestMapping("/testModel")
public String testModel(Model model){
    // 向request域中存储数据
    model.addAttribute("testRequestScope", "在SpringMVC中使用Model接口实现request域数据共享");
    return "view";
}

ModelMap

public String testModelMap(ModelMap modelMap){
    // 向request域中存储数据
    modelMap.addAttribute("testRequestScope", "在SpringMVC中使用ModelMap实现request域数据共享");
    return "view";
}

ModelAndView

这个类的实例封装了Model和View。也就是说这个类既封装业务处理之后的数据,也体现了跳转到哪个视图.

public ModelAndView testModelAndView(){
    // 创建“模型与视图对象”
    ModelAndView modelAndView = new ModelAndView();
    // 绑定数据
    modelAndView.addObject("testRequestScope", "在SpringMVC中使用ModelAndView实现request域数据共享");
    // 绑定视图
    modelAndView.setViewName("view");
    // 返回
    return modelAndView;
}

SpringMVC异常处理

作用:处理 处理器方法执行过程中出现的异常,跳转到对应视图,展示异常信息。

异常接口 HandlerExceptionResolver

image.png

实现类

  • DefaultHandlerExceptionResolver,默认的异常处理器。根据异常返回状态码。
  • SimpleMappingExceptionResolver,简单映射异常处理器。通过配置异常类和view的关系来解析异常。
  • ResponseStatusExceptionResolver,状态码异常处理器。解析带有@ResponseStatus注释类型的异常。
  • ExceptionHandlerExceptionResolver,注解形式的异常处理器。对@ExceptionHandler注解的方法进行解析。

重要 ExceptionHandlerExceptionResolver

@ControllerAdvice + @ExceptionHandler
小案例:

//@ControllerAdvice
@RestControllerAdvice //异常返回josn格式数据
public class GlobalException {

    @ExceptionHandler(CastException.class)  //指定异常
    public ErrorInfo errhandler(CastException e) throws Exception{
        ErrorInfo errorInfo = new ErrorInfo();
        errorInfo.setMsg(e.getMessage());
        return errorInfo;
    }
}