axios post 报 400

787 阅读1分钟

关于axios 对springboot的全局异常抛出的处理

当axios发送请求时,正常封装的结果集会正常返回

@PostMapping(value = "/login")
public Result login(@Validated @RequestBody LoginDto loginDto, HttpServletResponse response){
    response.setHeader("Connection","keep-alive");
    User user = userService.getOne(new QueryWrapper<User>().eq("username", loginDto.getUsername()));
    Assert.notNull(user,"用户不存在");  //使用断言抛出异常

    if(!user.getPassword().equals(SecureUtil.md5(loginDto.getPassword()))) {  //md5加密方式为32的小写
        return Result.fail("密码不正确");
    }

    String jwt = jwtUtils.generateToken(user.getId());
    response.setHeader("Authorization",jwt); //把生成的jwt设置到header中
    response.setHeader("Access-control-Expose-Headers","Authorization");

    return Result.success(MapUtil.builder()
            .put("id",user.getId())
            .put("username",user.getUsername())
            .put("avatar",user.getAvatar())
            .put("email",user.getEmail())
            .map()
    );
}

如同上面的密码不正确,和登入成功

但是通过Assert断言抛出的异常,前端会爆出400的错误

   POST http://localhost:8080/login 400
   Uncaught (in promise) Error: Request failed with status code 400
    at createError (createError.js?2d83:16:1)
    at settle (settle.js?467f:17:1)
    at XMLHttpRequest.onloadend (xhr.js?b50d:66:1)

此时可以通过获取到异常的响应数据

   .catch((error)=>{
                console.log(error.response) //获取服务器异常时的返回的响应数据
   })