jfinal Duang.duang(RoleService.class) 使用后无法抛自定义异常

发布于 2022-01-01 21:04:56 字数 155 浏览 688 评论 10

jfinal 2.0 使用了Duang.duang(RoleService.class);后,无法使用自定义异常throw new EntityException("entity[ "+role.toString()+" ] already exists"); 变成了runtime异常,求大神知道么为什么吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

醉酒的小男人 2022-01-07 16:34:07

马 刚遇到了 

伴我心暖 2022-01-07 16:33:27

感谢

巡山小妖精 2022-01-07 16:16:48

mark,这个问题之前也碰到过。

柒夜笙歌凉 2022-01-07 14:52:08

引用来自“JFinal”的评论

   是在哪个地方不能使用自定义异常/

别低头,皇冠会掉 2022-01-07 12:40:51

   是在哪个地方不能使用自定义异常/

千纸鹤带着心事 2022-01-07 06:40:45

感谢!!!

断爱 2022-01-06 23:27:23

这个问题之前碰到过,业务异常的话我是用Runtime接住,然后手工throw出来的

三月梨花 2022-01-06 19:08:17

感谢

猫九 2022-01-06 08:33:05

因为Duang.duang时回掉CallBack对象,callback对象执行作用在target对象上的intercept逐一执行;也就调用了Invocation.invoke方法,在invoke中产生的异常全部throw成RuntimeException了

public void invoke() {
	if (index < inters.length) {
		inters[index++].intercept(this);
	}
	else if (index++ == inters.length) {	// index++ ensure invoke action only one time
		try {
			// Invoke the action
			if (action != null) {
				returnValue = action.getMethod().invoke(target, args);
			}
			// Invoke the method
			else {
				// if (!Modifier.isAbstract(method.getModifiers()))
					// returnValue = methodProxy.invokeSuper(target, args);
				if (useInjectTarget)
					returnValue = methodProxy.invoke(target, args);
				else
					returnValue = methodProxy.invokeSuper(target, args);
			}
		}
		catch (InvocationTargetException e) {
			Throwable t = e.getTargetException();
			throw t instanceof RuntimeException ? (RuntimeException)t : new RuntimeException(e);
		}
		catch (RuntimeException e) {
			throw e;
		}
		catch (Throwable t) {
			throw new RuntimeException(t);
		}
	}
}

背叛残局 2022-01-04 14:58:35

   让 EntityException 继承自 RuntimeException 即可打完收工。

     原因是:jfinal aop 的 Invocation.invoke() 在捕获到异常以后,如果是 RuntimeException则会原样向外抛出,否则会 new RuntimeException(e) 包装一下向外抛出。如果不这样做就需要让 Invocation.invoke() 方法明确抛出 Excetpion,进而也强制了 Interceptor.intercept(inv) 方法要抛出 Exception,进而就使用开发者在Interceptor.intercept(inv) 不需要 try catch 任何异常,进而就导致了开发者忘了在 catch 块中回收资源。

     这终究是个设计的考虑,所以还是让你的自定义异常继承 RuntimeException 更好。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文