Spring MVC 处理异常

Spring提供了多种方式将异常转换为响应

  • 特定的Spring异常将会自动映射为指定的HTTP状态码
  • 异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码
  • 在方法上可以添加@ExceptionHandler注解,使其用来处理异常
1. 将异常映射为HTTP状态码
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Not Found")
public MyException extends RuntimeException {
}

如果控制器抛出MyException 异常,响应将会具有404状态码

2. 编写异常处理的方法
@ExceptionHandler(MyException.class)
public String handleMyException() {
	...
}

只能处理所在控制器类内抛出的所有MyException异常#

3. 为控制器添加通知

控制器通知是任意带有@ControllerAdvice注解的类,这个类会包含一个或多个如下类型的方法

  • @ExceptionHandler 注解标注的方法
  • @InitBinder 注解标注的方法
  • @ModelAttribute 注解标注的方法
    这些方法会运用到整个应用的所有有控制器中带@RequestMapping的方法

@ControllerAdvice本身已经使用了@Component,可以被扫描到

//处理所有控制器类的MyException异常
	@ExceptionHandler({MyException.class})
    public String handleMyException() {
        return "error";
    }
//或	
	@ExceptionHandler({MyException.class})
    public ModelAndView handleMyException() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("error");
        modelAndView.addObject("flag", "MyException");
        return modelAndView;
    }
	//把值绑定到Model中,使全局@RequestMapping可以获取到该值
    @ModelAttribute
    public void addAttributes(Model model) {
        model.addAttribute("name", "wang");...
    }
········································································
@RequestMapping("/profile")
public String profile(Model model) {
    modelMap.get("name");...
}
//或
@RequestMapping("/profile")
public String profile(@ModelAttribute("name") String name) {
    name;...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值