SpringBoot高级【异常处理的五种方式】

  • 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视图的指定

  • 参数 Exception e:会将产生异常对象注入到方法中

*/

@ExceptionHandler(value={java.lang.ArithmeticException.class})

public ModelAndView arithmeticExceptionHandler(Exception e){

ModelAndView mv = new ModelAndView();

mv.addObject(“error”, e.toString());

mv.setViewName(“error1”);

return mv;

}

/**

  • java.lang.NullPointerException

  • 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视

图的指定

  • 参数 Exception e:会将产生异常对象注入到方法中

*/

@ExceptionHandler(value={java.lang.NullPointerException.class})

public ModelAndView nullPointerExceptionHandler(Exception e){

ModelAndView mv = new ModelAndView();

mv.addObject(“error”, e.toString());

mv.setViewName(“error2”);

return mv;

}

}

2.错误页面

error1.html页面

错误页面

出错了,请与管理员联系。。。错误提示页面-ArithmeticException

error2.html页面

错误页面

出错了,请与管理员联系。。。错误提示页面-NullPointerException

3.演示效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、@ControllerAdvice+@ExceptionHandler 注解处理异常


第二种处理方式中,异常处理的代码和业务代码放在一个类中了,这种方式耦合性太强了,最好是将业务和异常处理的代码分离开,这时我们可以定义一个专门的异常处理类,通过注解@ControllerAdvice来实现。具体如下:

1.异常处理类

/**

  • @program: springboot-exception

  • @description: 全局异常处理器

  • @author: 波波烤鸭

  • @create: 2019-05-17 10:07

*/

@ControllerAdvice

public class GlobalException {

/**

  • java.lang.ArithmeticException

  • 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视图的指定

  • 参数 Exception e:会将产生异常对象注入到方法中

*/

@ExceptionHandler(value={java.lang.ArithmeticException.class})

public ModelAndView arithmeticExceptionHandler(Exception e){

ModelAndView mv = new ModelAndView();

mv.addObject(“error”, e.toString()+" – advice");

mv.setViewName(“error1”);

return mv;

}

/**

  • java.lang.NullPointerException

  • 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视

图的指定

  • 参数 Exception e:会将产生异常对象注入到方法中

*/

@ExceptionHandler(value={java.lang.NullPointerException.class})

public ModelAndView nullPointerExceptionHandler(Exception e){

ModelAndView mv = new ModelAndView();

mv.addObject(“error”, e.toString()+" – advice");

mv.setViewName(“error2”);

return mv;

}

}

2.controller

控制器中就只有业务处理的代码了

/**

  • @program: springboot-exception

  • @description: 异常处理案例

  • @author: 波波烤鸭

  • @create: 2019-05-17 09:42

*/

@Controller

public class UserController {

/**

  • 模拟 NullPointerException

  • @return

*/

@RequestMapping(“/show1”)

public String showInfo(){

String str = null;

str.length();

return “index”;

}

/**

  • 模拟 ArithmeticException

  • @return

*/

@RequestMapping(“/show2”)

public String showInfo2(){

int a = 10/0;

return “index”;

}

}

3.测试

在这里插入图片描述

在这里插入图片描述

四、SimpleMappingExceptionResolver 处理异常


我们还可以通过SimpleMappingExceptionResolver将具体的异常和错误页面指定对应关系,这样就不用每个异常都单独写一个方法了。

/**

  • @program: springboot-exception

  • @description: 全局异常处理器

  • @author: 波波烤鸭

  • @create: 2019-05-17 10:07

*/

@Configuration

public class GlobalException {

/**

  • 该方法必须要有返回值。返回值类型必须是:

SimpleMappingExceptionResolver

*/

@Bean

public SimpleMappingExceptionResolver

getSimpleMappingExceptionResolver(){

SimpleMappingExceptionResolver resolver = new

SimpleMappingExceptionResolver();

Properties mappings = new Properties();

/**

  • 参数一:异常的类型,注意必须是异常类型的全名

  • 参数二:视图名称

总结:心得体会

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。

学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。

面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。

学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。

面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

[外链图片转存中…(img-L4PEp6Ta-1714466547323)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值