如何统一处理controller层的异常并返回

这几天在跟同事调接口过程中,经常遇到接口返回对方异常堆栈的错误信息。很明显是异常没有进行处理。一般我们会用标准的try-catch来捕获异常。
但是这样地处理只适合那种主动提示的检查时异常,因为你不用的try-catch就过不了编译检查,所以你能主动地抓获异常并进行处理。但是,如果存在运行时异常,你没有来得及想到去处理它的时候会发生什么,我们可以来先看看下面的这个没有处理运行时异常的例子?

@RestController
        public class ExceptionRest {
            @GetMapping("getNullPointerException")
            public Map<String, Object> getNullPointerException() {
                throw new NullPointerException("出现了空指针异常");
            }
        }

以上代码在基于Maven的用SpringMVC的项目中,使用的Tomcat启动后,浏览器端发起如下请求:

HTTP://本地主机:8080 / zxtest / getNullPointerException

访问后得到的结果是这样的:

可以看到,我们在控制器接口层抛出了一个空指针异常,然后没有捕获,查询查询结果异常堆栈就会报道查看给前端浏览器,给用户造成了非常不好的体验。

除此之外,前端从报错信息中能看到后台系统使用的服务器及中间件类型,所采用的框架信息及类信息,甚至如果后端抛出的是SQL异常,那么还可以看到SQL异常的具体查询的参数信息,这是一个中危安全漏洞,是必须要修复的。

PS:上面的项目如果使用SpringBoot的话可能在前端得不到报错信息,因为SpringBoot自动对返回的报错内容做了处理,我们需要使用的Maven的网站模板创建一个只包含用SpringMVC的项目来复现以上场景。

二,如何做到统一处理?

当出现这种运行时异常的时候,我们想到的最简单的方法也许就是给可能会抛出异常的代码加上异常处理,如下所示:

@RestController
public class ExceptionRest {
    private Logger log = LoggerFactory.getLogger(ExceptionRest.class);
    @GetMapping("getNullPointerException")
    public Map<String,Object> g
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值