系统接口未找到报404异常统一返回处理

上篇博客:异常处理返回结构体,做到全局统一,仍然会出现一些情况。

针对未找到接口爆出404异常,返回结构体如果没有处理的话会变成下面这样,不会走全局异常处理,这样的话就没有完全做到全局异常统一处理。

{
    "timestamp": "2023-12-15T03:16:13.576+00:00",
    "status": 404,
    "error": "Not Found",
    "message": "",
    "path": "/sysUser/detail111"
}
如何做到

需要关闭默认的静态资源路径映射和开启未找到异常处理

# 当HTTP状态码为4xx时直接抛出异常,默认是关闭的
spring.mvc.throw-exception-if-no-handler-found=true

# 关闭默认的静态资源路径映射,默认是开启的
spring.resources.add-mappings=false

处理之后如果调用未有的接口,全局异常中Exception会处理。

 /**
     * 系统异常
     */
    @ExceptionHandler(Exception.class)
    public ResultBody handleException(Exception e, HttpServletRequest request) {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}',发生系统异常.", requestURI, e);
        return ResultBodyUtils.fail(ErrorCode.SYSTEM_ERROR_500, requestURI);
    }

返回结果:

{
    "code": 500,
    "message": "Interface /sysUser/detail111 internal error, please contact the administrator",
    "data": null
}

如果需要更加具体的异常处理,还需要在全局异常中进行如下处理。

    /**
     * 处理 HTTP 404 错误
     */
    @ExceptionHandler({NoHandlerFoundException.class, HttpRequestMethodNotSupportedException.class})
    public ResultBody handleNotFound(HttpServletRequest request, Exception e) {
        String requestURI = request.getRequestURI();
        log.error("请求地址'{}'不存在.", requestURI, e);
        return ResultBodyUtils.fail(ErrorCode.SYSTEM_ERROR_404, requestURI);
    }

返回结果:

{
    "code": 404,
    "message": "Interface /sysUser/detail111 Not Found",
    "data": null
}

这样就可做到在系统中出现任何问题,它的返回结构体都可做到统一。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如风之夏

感谢,你的鼓励是我前进的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值