关键词搜索

源码搜索 ×
×

java异常处理拦截器

发布2021-10-21浏览1691次

详情内容

使用异常处理拦截器,可以不用写那么多try…catch…。

我有个功能,就是前端提交短信内容到后端,后端进行一系列的处理,其中是要将短信内容提交到公共短信接口。微服务框架,公共短信接口是另外一个服务。这样子就会有一个隐患,假如这个服务不开,或者因为网络原因无法访问,怎么办?

可以原子操作,也可以重新提交啥的,不管怎么搞,错误提示是避免不了的。问题是,系统赤裸裸的贴代码的错误提示方式,极不友好。应当捕获这个错误,然后改用较为友好的内容进行提示。

最原始的办法,可以层层try…catch…,从service一直到controller这里返回给前端。但未免太繁琐,感觉很low。作为程序员,不应当这么机械。

参照网上办法,在controller这里设置一个异常处理拦截器

@RestController
@RequestMapping("sms/order")
public class DzSmsSendOrderController {
	。。。
	
    @ExceptionHandler(value = {RuntimeException.class})
    public ResultBody handleRuntimeException(Exception ex) throws Exception {
        if (ex.getMessage().indexOf("project-sms-api") != -1) {//鉴别一下是否为目标异常
            return ResultBody.failed().msg("访问短信接口失败,请确认相关服务是否已开启");
        } else throw ex;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这个ResultBody是一个自定义的对象,前端根据其返回的编号等判断是否成功。

@ApiModel(value = "响应结果")
public class ResultBody<T> implements Serializable {
	。。。
	
    public static ResultBody failed() {
        return new ResultBody().code(ErrorCode.FAIL.getCode()).msg(ErrorCode.FAIL.getMessage());
    }
    
    @Override
    public String toString() {
        return "ResultBody{" +
                "code=" + code +
                ", message='" + message + '\'' +
                ", path='" + path + '\'' +
                ", data=" + data +
                ", httpStatus=" + httpStatus +
                ", extra=" + extra +
                ", timestamp=" + timestamp +
                '}';
    }
}

public enum ErrorCode {
    OK(0, "success"),
    FAIL(1000, "fail"),
    ALERT(1001, "alert"),
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

前端就根据这个code,来判断成功与否。

参考文章:
java如何给异常信息加上提示给用户看?


2021.11.01
这种写法,只适合运行时报错,编码中不能写这个throw new Exception。代码中显示抛出异常,上层必须要trc…catch或跟着抛异常,那这个所谓顶层捕获就没有什么卵用了。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载