vue axios 网络状态status=401的时候,接收服务器返回的数据

当后端采用RESTful接口规范时,前端可能会收到如401等错误状态码,导致无法获取数据。这个问题源于axios默认忽略非200-300之间的状态码。为解决此问题,可以修改axios的库文件`settle.js`,在判断条件中增加对401状态码的接受,允许前端在401状态下仍能接收到服务器返回的数据。
摘要由CSDN通过智能技术生成

vue axios 网络状态status=401的时候,接收服务器返回的数据

问题描述: 后端使用restfull接口规范,这样就会有400,401,404等这样得状态码返回给前端,导致前端无法获取到服务器的数据了。
原因: axios 默认抛弃了 网络状态不在 [200, 300) 区间的服务器返回
解决: 修改axios的库文件,增加允许返回的判断

方案如下
库文件所在位置:node_modules/axios/lib/core/settle.js
在这里插入图片描述
第16行 原代码注释:

if (!response.status || !validateStatus ||validateStatus(response.status)){

增加如下代码

if (!response.status || !validateStatus || (validateStatus(response.status) || response.status === 401)){
`ResponseEntity` 是 Spring MVC 中的一个重要类,用于封装 HTTP 响应。如果你想通过它返回错误信息并处理前端的 Axios 请求,可以这样做: 首先,在服务层(Controller 或其他业务逻辑处理层),当遇到异常需要返回错误状态码和详细描述时,你可以创建一个自定义的实体类,比如 `ErrorResponse`,包含错误代码、消息等字段: ```java public class ErrorResponse { private int code; private String message; // 构造函数、getter 和 setter 方法 } ``` 然后,在处理请求的地方,如果你有具体的错误情况,可以这样创建并返回 `ResponseEntity`: ```java import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Optional; @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) public ResponseEntity<ErrorResponse> handleException(Exception ex) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); int status = 500; // 这里可以根据异常类型设置不同的HTTP状态ErrorResponse error = new ErrorResponse(status, ex.getMessage()); // 返回带有错误信息的ResponseEntity return ResponseEntity.status(status).body(error); } } ``` 在上述代码中,`@ExceptionHandler` 注解用于捕获全局异常,`handleException` 方法会在遇到异常时被调用。Spring会自动将这个方法的返回值作为 HTTP 响应发送出去。 最后,在前端,使用 Axios 发起请求时,可以配置错误处理来接收和解析服务器返回的 JSON 数据: ```javascript axios.interceptors.response.use( response => response, error => { if (error.response && error.response.data) { // 如果响应包含错误数据 const errorCode = error.response.data.code; const errorMessage = error.response.data.message; console.error(`Error ${errorCode}: ${errorMessage}`); // 在这里你可以选择如何显示错误给用户,比如抛出一个新的 Vue 错误、提示框等 } else { console.error('An unknown server error occurred'); } return Promise.reject(error); // 继续处理错误 } ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值