本发明涉及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)。