Spring boot---自定义错误处理

Spring boot—自定义错误处理

首先明确:springboot会跟据异常的错误代码自动返回静态资源下error文件夹下的对应的错误代码的hmtl
例如:错误代码404,会响应/static/error/404.html
思路:首先自定义个错误异常类,并在controller中出错抛出该异常,再使用springmvc中@ControllerAdvice 创建一个处理异常的类,在类中写方法并使用@ExceptionHandler注解标注出什么类型的错误使用该方法在方法中定义错误信息,也可以向request中存放信息(注意里面要定义错误的code)javax.servlet.error.status_code,最后重定向到ERROR页面

1.定义错误异常类

/**
 * 一个异常类 继承运行异常RuntimeException
 * 构造器直接向super发送信息
 */
public class UserExceptionHandler extends RuntimeException {
    public UserExceptionHandler() {
        super("用户不存在");
    }
}

2.在controller可以抛出定义的异常类

@Controller
public class UserController {
    @ResponseBody
    @RequestMapping("/login")
    public String login(@RequestParam("user") String user){

        if(!user.equals("aaa")){
            //抛出自定义的异常
            throw new UserExceptionHandler();
        }
        return "Hello World";

    }
}

3.定义一个处理异常的类(意思就是当有异常抛出,会执行这个对应的类型类,实现错误消息显示到页面)

/**
 * springMVC处理异常的注解
 */
@ControllerAdvice
public class MyUserException {
    //处理什么类型的异常
    @ExceptionHandler(UserExceptionHandler.class)
    public String handlerException(Exception  e, HttpServletRequest request){
        Map<String,Object> map = new HashMap<>();
        //给当前request中放入404的错误以及自定义的信息
        //这里定义404是因为会由springboot自动找对应静态资源下的404html
        request.setAttribute("javax.servlet.error.status_code",404);
        request.setAttribute("abc","这是User的自己定义的错误信息");
        //转发
        return "forward:/error";
    }
}

4.如果需要给异常返回的数据添加一些自定义数据

//加入到容器中
@Component
//继承springmvc的默认异常存参数的类
public class MyErrorAttributes extends DefaultErrorAttributes {
    //重写错误参数方法
    @Override
    public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
        //获取错误异常的参数
         Map<String,Object>  map = super.getErrorAttributes(webRequest, includeStackTrace);
         //向错误异常参数map中放入自己想放入的参数
        map.put("componey","jjj");
        //也可以从webRequest中获取某个定义的异常处理类中获取request值放入到map中
        Object a = webRequest.getAttribute("abc",0);
        map.put("msg",a);
        return map;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值