博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用@ExceptionHandler 来进行异常处理
阅读量:6368 次
发布时间:2019-06-23

本文共 1191 字,大约阅读时间需要 3 分钟。

有时候我们想统一处理一个Controller中抛出的异常怎么搞呢?

直接在Controller里面加上用@ExceptionHandler标注一个处理异常的方法像下面这样子

@ExceptionHandler(MissingServletRequestParameterException.class)@ResponseStatus(HttpStatus.BAD_REQUEST)public void processMethod(MissingServletRequestParameterException ex,HttpServletRequest request ,HttpServletResponse response) throws IOException {    System.out.println("抛异常了!"+ex.getLocalizedMessage()); logger.error("抛异常了!"+ex.getLocalizedMessage()); response.getWriter().printf(ex.getMessage()); response.flushBuffer(); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这样,Controller里面的方法抛出了MissingServletRequestParameterException异常就会执行上面的这个方法来进行异常处理。 

像我下面的代码

@RequestMapping("/index")public String index(@MyUser User user,@RequestParam String id,ModelMap modelMap){    return "login"; }
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

如果我没有传入id值,那么就会抛出MissingServletRequestParameterException的异常,就会被上面的异常处理方法处理。

上面的@ExceptionHandler(MissingServletRequestParameterException.class)这个注解的value的值是一个Class[]类型的,这里的ExceptionClass是你自己指定的,你也可以指定多个需要处理的异常类型,比如这样@ExceptionHandler(value = {MissingServletRequestParameterException.class,BindException.class}),这样就会处理多个异常了。

但这个只会是在当前的Controller里面起作用,如果想在所有的Controller里面统一处理异常的话,可以用@ControllerAdvice来创建一个专门处理的类。

转载地址:http://vaema.baihongyu.com/

你可能感兴趣的文章
linux内核模块编译
查看>>
【数据存储】操作资源文件
查看>>
数字信号处理之低通滤波器设计
查看>>
Learning Cocos2d-x for WP8(3)——文字篇
查看>>
转 AngularJS 2.0将面向移动应用并放弃旧浏览器
查看>>
Length of Last Word
查看>>
Vue 数据绑定语法
查看>>
C++课程小结 继承与派生
查看>>
SQL Server 自定义字符串分割函数
查看>>
从CMOS到触发器(二)
查看>>
linux 时间同步的2种方法
查看>>
python __setattr__和__getattr__
查看>>
Redis(什么是Redis?)
查看>>
Linux下双物理网卡设置成虚拟网卡
查看>>
Java Swing界面编程(25)---事件处理:鼠标事件及监听处理
查看>>
改动wordpress默认发邮件邮箱地址
查看>>
2019足协超级杯花落苏州 开幕战上演“京沪对决”
查看>>
统计局:2018年全国工业产能利用率为76.5%
查看>>
“大白兔”迎来60岁生日 各类衍生品受青睐
查看>>
西安火车站迎来“大手术”
查看>>