springboot异常处理

问题描述:
如果网络请求错误,默认返回一个json数据,但是在页面上却只能看到404;返回的json数据如下所示:

{
    "timestamp": "2021-08-04T06:38:20.294+00:00",
    "status": 404,
    "error": "Not Found",
    "path": "/"
}

捕获异常,并显示错误信息具体实现方法

步骤一:创建UserNotException,表示用户不存在异常,

public class UserNotException extends RuntimeException {
    public UserNotException() {
        super("用户不存在");
    }
}

步骤2:在UserController中,如果前端请求用户名不存在,则抛出异常

 @PostMapping("/aaa")
    @ResponseBody
    public String alogin(@RequestParam("user") String userName){
        if (userName.equals("aaa")){
            throw new UserNotException();
        }
        return "helloa";
    }

步骤3:创建全局异常处理器,使用@ExceptionHandler(UserNoteException.class)捕获该异常

/**
 * 异常处理器
 */
@ControllerAdvice//表示可接收全局异常,
public class MyExceptionHandler {
    @ExceptionHandler(UserNotException.class)//对于该异常的处理方式

    @ResponseBody
    public Map<String, Object> handleException(Exception e){
        Map<String,Object>map=new HashMap<>();
        map.put("code","user.notexit");
        map.put("message","用户不存在");
        return map;
    }
}

至此,可实现基本的异常处理问题!!!!!即当用户不存在时,页面可显示json数据
BasicErrorController处理错误请求,/error;
参照ErrorMvcAutoConfiguration----------错误处理的自动配置类

自定义错误返回内容具体实现方法

步骤1:仍旧采用MyExceptionHandler接收全局异常,但是不直接返回异常信息,而是转为/error请求,并使用request来携带数据

/**
 * 异常处理器
 */
@ControllerAdvice//表示可接收全局异常,
public class MyExceptionHandler {
    @ExceptionHandler(UserNotException.class)//对于该异常的处理方式
    public String handleException(Exception e, HttpServletRequest request){
        Map<String,Object>map=new HashMap<>();
        map.put("code","user.notexit");
        map.put("message","用户不存在");
        request.setAttribute("ext",map);
        return "forward:/error";
    }
}

步骤2:因为BasicErrorController类会响应/error请求,该控制器中包含ErrorAttributes属性,可以利用该自定义错误信息
因此通过继承该方法来自定义错误信息

@Component
public class MyErrorAttributes extends DefaultErrorAttributes {
    @ResponseBody
    @Override
    public Map<String, Object> getErrorAttributes(WebRequest webRequest, ErrorAttributeOptions options) {
        Map<String, Object> errorAttributes = super.getErrorAttributes(webRequest, options);
        errorAttributes.put("company","sdee");
        Map<String,Object> ext = (Map<String, Object>) webRequest.getAttribute("ext", 0);
        errorAttributes.put("ext",ext);
        return errorAttributes;
    }
}

最后的实现效果如下图所示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值