关于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) //获取服务器异常时的返回的响应数据
})