@JFinal 波总,我在业务层主动抛出了一个异常,但却不能在全局拦截器被捕捉,请帮忙分析一下。
1. Db.query("select from ccc");// 用一个SQL语法错误触发可以在全局拦截器捕捉;
2. throw new MySQLSyntaxErrorException("skuid对应的商家商品不存在");//手动抛出不能被全局拦截器捕捉。
业务方法:
Float price = Db.queryFloat("select retailPrice from store_stock where id=?",orderDetail.getSkuId());
if (price==null){
map.put("result", "-1");
map.put("msg", "skuid对应的商家商品不存在");
throw new SQLException("skuid对应的商家商品不存在");
-------------------------------
全局拦截器相关:
public class ExceptionInterceptor implements Interceptor{
@Override
public void intercept(Invocation inv) {
// TODO Auto-generated method stub
Controller c = inv.getController();
// HttpServletRequest request = c.getRequest();
try{
inv.invoke();
}catch (ActionException e){
throw e;
}
catch(Exception e){
//System.out.println(e.getMessage());
e.printStackTrace();
c.renderJson("{\"result\":-255,\"msg\":"+e.getMessage()+"}");
}
}
}
1:查看控制台的 JFinal Action Report 输出,看ExceptionInterceptor是否拦截了该请求
2:确保当前请求拦截以后,在 catch 块中设置断点,看是否捕捉到异常
3:如果没有捕捉到,再检查一下是否有别的拦截器将异常吃掉没有再次抛出
4:注意改过的代码是否不生效,eclipse 有时会有这个 bug
5:终极方案,单步调试,看程序到底怎么走的。建议直接使用终极方案,少走弯路