springboot_05 异常方法

全局异常捕获

在springboot中看了之前的一篇就知道异常有多重要了
全局异常方法类

@ControllerAdvice
public class GlobalExceptionHandlerResolver {

//    @ExceptionHandler(value = Exception.class)
//    @ResponseBody
//    public Map<String,Object> exceptionHandler(Exception e){
//        Map<String,Object> map = new HashMap<>();
//        map.put("code",500);
//        map.put("msg","系统异常请重试");
//
//        //判断是否是指定异常
//        if(e instanceof ParamsException){
//            ParamsException p = (ParamsException) e;
//            map.put("code",p.getCode());
//            map.put("msg",p.getMsg());
//        }
//        return map;
//    }

    /**
     * 处理特定的异常
     */
    @ExceptionHandler(value = ParamsException.class)
    @ResponseBody
    public Map<String,Object> exceptionHandler02(ParamsException p){
        Map<String,Object> map = new HashMap<>();
        map.put("code",p.getCode());
        map.put("msg",p.getMsg());
        return map;
    }


    /**
     * 处理数据校验字段的异常
     */
    @ExceptionHandler(value = BindException.class)
    @ResponseBody
    public Map<String,Object> exceptionHandler03(BindException b){
        Map<String,Object> map = new HashMap<>();
        map.put("code",500);
        map.put("msg",b.getBindingResult().getFieldError().getDefaultMessage());
        return map;
    }
}
第一个注解@ControllerAdvice注解
    组合了@Component注解 就是作为全局异常处理类的切面类 同时可以指定扫描包的范围
第二个注解@ExceptionHandler
    这个在处理异常时标注在方法级别 代表当前方法处理的异常类 

这样如果有对应的异常发生就会被handler捕获然后做对应的方法处理
自定义方法异常
paramerException
创建对应service层对应的exception类

package com.heyongqiang.ecxeptions;

public class ParamsException extends RuntimeException{
    private Integer code = 500;
    private String msg = "参数错误";

    public ParamsException(){
        super("参数异常");
    }

    public ParamsException(String msg){
        super(msg);
        this.msg = msg;
    }

    public ParamsException(Integer code){
        super("参数异常!");
        this.code = code;
    }
    public ParamsException(Integer code,String msg){
        super(msg);
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}
需要继承RuntimeException

这里的自定义属性可以是map中的键值 也可以是resultinfo的具体属性

数据校验(BindException) 如果注解出错则会抛出该异常
在web环境导入的时候就引入了validation数据校验
只要在实体类的属性上加上对应的注解就可以
@NotBlank(message = "用户姓名不能为空")
private String userName;//用户名称
@NotBlank(message = "用户密码不能为空")
@Length(min = 4, max = 10 , message = "用户密码长度为4~10位")
private String userPwd;//用户密码
@Email(message = "用户邮箱格式不正确")
private String userEmail;//用户邮箱

这里的message就是异常的提示信息
在全局异常方法类中使用
map.put(“msg”,b.getBindingResult().getFieldError().getDefaultMessage());
对应的方法就可以提取出message信息
方法类 AsserUtil

public class AsserUtil {
    /**
     * 如果字符串是空就抛出一个异常类
     * @param flag
     * @param msg
     */
    public static void isTrue(Boolean flag,String msg){
        if(flag){
            throw new ParamsException(msg);
        }
    }
}
如题

这样就可以解放service层的方法代码
正确执行:
请求正常返回controller层然后返回给前端
发生异常
首先错误的判断会在util方法类中被发现 然后没有符合条件的工具栏就会抛出对应的异常

throw new ParamsException(msg);
    然后这个异常就会被全局异常方法类给捕获
@ExceptionHandler(value = ParamsException.class)
   这里就不会回到controller层了而是返回你想要定义的异常事件处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值