java方法不拦截_一种解决JAVA平台自定义错误不能全面拦截的方法与流程

本文介绍了一种在JAVA平台项目中解决自定义异常未被充分拦截问题的方法。通过自定义异常类、继承系统异常、重构构造方法并定义handleMsg静态方法,实现了对外层捕获并统一处理异常,确保了错误信息的全面捕获。
摘要由CSDN通过智能技术生成

本发明涉及JAVA平台技术领域,特别涉及一种解决JAVA平台自定义错误不能全面拦截的方法。

背景技术:

在基于JAVA平台的项目里,经常会自定义一些异常类,用来在实现层抛出一些可预知的错误信息,但在对外的接口层或控制层捕捉时,却经常捕捉不到,展现给用户时,用户就不知到底发生了什么错误;为了解决这个问题,需要实现一种能完全捕抓异常的功能。

技术实现要素:

本发明解决的技术问题在于提供一种解决JAVA平台自定义错误不能全面拦截的方法;解决了自定义错误不能全面捕抓的问题。

本发明解决上述技术问题的技术方案是:

自定义一个异常类,继承系统异常类,并重构其父类的构造方法,在类里再定义一个用于处理错误消息类型的静态方法handleMsg。当在项目的实现层抛出自定义的异常时,在对外的一层方法使用try catch对其捕抓,并在catch里使用handleMsg方法对错误类型进行统一处理,最后再向外抛出。从而解决了自定义错误不能全面捕抓的问题。

所述的方法具体包括如下步骤:

步骤一、自定义一个异常类,并继承系统异常类;

步骤二、重构其父类的构造方法;

步骤三、在类里再定义一个用于处理错误消息类型的静态方法handleMsg,根据不同类型的错误进行判断,如果是其实例,进行强制转换,获取其错误信息进行返回;

步骤四、在项目的实现层抛出自定义的异常;

步骤五、在对外的接口层或控制层方法里使用try catch对其捕抓;

步骤六、在catch里使用handleMsg方法对错误类型进行统一处理,把经过处理的异常信息向外抛出。

本发明的有益效果:自定义一个异常类,继承系统异常类,并重构其父类的构造方法,在类里再定义一个用于处理错误消息类型的静态方法handleMsg。当在项目的实现层抛出自定义的异常时,在对外的一层方法使用try catch对其捕抓,并在catch里使用handleMsg方法对错误类型进行统一处理,最后再向外抛出,从而达到错误信息能全面捕抓的目的。有效解决了自定义错误不能全面捕抓的问题。

附图说明

下面结合附图对本发明进一步说明:

图1为本发明的流程图。

具体实施方式

如图1所示,本发明采用如下步骤:

步骤一、自定义一个异常类,并继承系统异常类;

public class ApiException extends Exception {

private int errorCode = 500;

public int getErrorCode() {

return errorCode;

}

步骤二、重构其父类的构造方法;

public ApiException(String exception) {

super(exception);

}

public ApiException(String exception, int errorCode) {

super(exception);

this.errorCode = errorCode;

}

步骤三、在类里再定义一个用于处理错误消息类型的静态方法handleMsg,根据不同类型的错误进行判断,如果是其实例,进行强制转换,获取其错误信息进行返回;

public static String handleMsg(Exception e) {

String msg = null;

if (e instanceof InvocationTargetException) {//反射类

Throwable targetEx = ((InvocationTargetException) e).getTargetException();

if (targetEx != null) {

msg = targetEx.getMessage();

}

} else if(……){//其它

……

} else{

msg = e.getMessage();

}

return msg;

}

步骤四、在项目的实现层抛出自定义的异常;

@Service

public class ApiServiceImpl implements ApiService {

@Override

public String checkAccount(Map<String, String> jsonMap) throws Exception {

//初始的判断

if(jsonMap.get("pharmacyCode") == null) throw new ApiException("**参数不能为空");

if(jsonMap.get("recipeCode") == null) throw new ApiException("**参数不能为空");

}

步骤五、在对外的接口层或控制层方法里使用try catch对其捕抓;

@Controller

@RequestMapping(value = "/api")

public class ApiController extends BaseController {

@Autowired

ApiService apiService;

@RequestMapping(value = "/ checkAccount.action")

public @ResponseBody Map checkAccount(@RequestParam Map<String,Object> jsonMap) {

Object returnValue = null;

try {

if(jsonMap==null) throw new ApiException("系统公共参数有误");

returnValue = apiService. checkAccount(jsonMap);

} catch (Exception e) {

//此处需要步骤六做统一异常处理

……

}

}

}

步骤六、在catch里使用handleMsg方法对错误类型进行统一处理,把经过处理的异常信息向外抛出。

String msg = ApiException.handleMsg(e);

return JsonResult.error(returnValue, 500, msg)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值