SpringBoot----响应错误处理页面的定制(客户端和浏览器)39

第一步:编写一个SpringMVC异常处理器起来专门处理异常。请求转发到默认自带的BasicErrorController下面的方法去处理。

@ControllerAdvice
public class MyExceptionHandler {


    //可以直接写Exception处理所有异常
    @ExceptionHandler(UserNotExistException.class)
    public String handleException(Exception e, HttpServletRequest request){

        Map<String,Object> map= new HashMap<>();
        //传入我们自己的错误状态码:4xx和5xx,否则不会进入错误页面的解析流程
        /**
         * Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");
         */
        request.setAttribute("javax.servlet.error.status_code",400);
        map.put("code","user notexist");
        map.put("message",e.getMessage());
        request.setAttribute("exi",map);
        

        //转发到"/error"  ,能够自适应
        return "forward:/error";
    }
}

第二步:继承DefaultErrorAttributes组件重写getErrorAttributes方法来添加上自己的参数进去,放入到容器中

@Component
public class MyErrorAttributes extends DefaultErrorAttributes {

    //
    @Override
    public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
        Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);

        map.put("company","fanren");
        //这个方法需要0或1参数,分别代表request、session作用域
        Object exi = webRequest.getAttribute("exi", 0);
        map.put("exi",exi);
        return map;
    }
}

第三步:在对应的错误页面(如400.html页面)中取出参数

<main role="main" class="col-md-9 ml-sm-auto col-lg-10 pt-3 px-4">
	<h1>status:[[${status}]]</h1>
	<h2>time:[[${#dates.format(timestamp,'yyyy-MM-dd HH:mm:ss')}]]</h2>
	<h2>error:[[${error}]]</h2>
	<h2>message:[[${message}]]</h2>
	<h2>company:[[${company}]]</h2>
	h2>code:[[${exi.code}]]</h2>
</main>

结果:打开项目中抛出异常处理的链接看响应

浏览器错误响应

客户端错误响应

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值