Spring Boot HTTP OVER JSON的错误码异常处理.md


  1. 异常统一处理的使用场景
在前后端分离开发中,经常用 HTTP over JSON 作为服务进行前后端联调对接。
为啥前后端分离开发?我想到如下:

1.低耦合,责权分离,模块化。前后端之间利用轻量级协议对接耦合。
2.便于敏捷开发:后端给出 api 文档 -> 前端根据文档,mock出数据开发 ;同时,后端实现业务逻辑。
3.微服务尤其适用

HTTP over JSON 形式中很多涉及到返回码,错误码相关的处理。比如xxx参数不完整,权限不足,用户不存在等。
  • 怎么统一处理认为是异常的场景呢?
    利用的是Spring 4.x提供的RestControllerAdvice。
    这里做下说明,也可以根据ControllerAdvice 去实现。这里案例是 HTTP over JSON 模式,所以直接利用RestControllerAdvice——控制层通知器,这里用于统一拦截异常,进行响应处理。
    工作模式,如图:
    在这里插入图片描述
  1. 异常统一处理
    1. 首先,工程目录如下:
├── pom.xml
└── src
    └── main
        └── java
            └── org
                └── spring
                    └── springboot
                        ├── Application.java
                        ├── constant
                        │   └── CityErrorInfoEnum.java
                        ├── result
                        │   ├── ErrorInfoInterface.java
                        │   ├── GlobalErrorInfoEnum.java
                        │   ├── GlobalErrorInfoException.java
                        │   ├── GlobalErrorInfoHandler.java
                        │   └── ResultBody.java
                        └── web
                            ├── City.java
                            └── ErrorJsonController.java
    1. 控制层通知器GlobalErrorInfoHandler:
GlobalErrorInfoHandler.java 代码如下:

@RestControllerAdvice
public class GlobalErrorInfoHandler {
 
@ExceptionHandler(value = GlobalErrorInfoException.class)
public ResultBody errorHandlerOverJson(HttpServletRequest request,
GlobalErrorInfoException exception) {
    ErrorInfoInterface errorInfo = exception.getErrorInfo();
    ResultBody result = new ResultBody(errorInfo);
    return result;
    }
}

> @ExceptionHandler:标记了使用errorHandlerOverJson()方法来处理GlobalErrorInfoException异常。
> @RestControllerAdvice:是@ControllerAdvice和@ResponseBody的语义结合。是控制器增强,直接返回对象。这里用于统一拦截异常,然后返回错误码对象体。
> @ResponseBody:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverte转换为指定格式后,写入到Response对象的body数据区。
    1. 响应码的设计:
  • 简单讲讲,这里定义了一个错误码接口,全局错误码枚举和各个业务错误码枚举去实现接口,并用枚举值枚举出错误码及错误码消息列表。如图:
    在这里插入图片描述

参考:https://www.bysocket.com/?page_id=1639

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值