使用异常处理拦截器,可以不用写那么多 try…catch…。
我有个功能,就是前端提交短信内容到后端,后端进行一系列的处理,其中是要将短信内容提交到公共短信接口。微服务框架,公共短信接口是另外一个服务。这样子就会有一个隐患,假如这个服务不开,或者因为网络原因无法访问,怎么办?
可以原子操作,也可以重新提交啥的,不管怎么搞,错误提示是避免不了的。问题是,系统赤裸裸的贴代码的错误提示方式,极不友好。应当捕获这个错误,然后改用较为友好的内容进行提示。
最原始的办法,可以层层 try…catch…, 从 service 一直到 controller 这里返回给前端。但未免太繁琐,感觉很 low 。作为程序员,不应当这么机械。
参照网上办法,在 controller 这里设置一个异常处理拦截器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@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; } } |
这个 ResultBody 是一个自定义的对象,前端根据其返回的编号等判断是否成功。
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 28 29 30 31 |
@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" ), } |
前端就根据这个 code ,来判断成功与否。
到此这篇关于java异常处理拦截器详情的文章就介绍到这了,更多相关java异常处理拦截器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/leftfist/article/details/120888027