前置小知识
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
实现类
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;
}
}