Java - 异常无法被捕获

3

我正在使用Spring ROO。在我的Web应用程序中,我可以创建许多用户并保存。我也可以更新现有的用户。

对于更新场景,我们使用merge()方法来更新现有数据。在数据库中,“用户名”列是唯一的。以下是场景:

  1. 用户使用手机号码“6039274849”创建了一个名为“Sean”的用户名

  2. 用户创建了另一个名为“Parker”的用户,其手机号码为“8094563454”

  3. 当用户尝试将第二个用户“Parker”更新为“Sean”时,我会收到异常。

在堆栈跟踪中,我可以看到以下异常是原因:

  1. 由ConstraintviolationException引起
  2. 由SQLException引起
  3. 由TransactionSystemException引起
  4. 由PersistenceException引起
  5. 由TransactionRollbackException引起

我尝试做以下操作:

public String merge()
  {
     try{
          //code to merge
        }
     catch(????? e){
         throw e;
     }
  }

我试图在“????”中添加上述5个异常。但我仍然无法捕获到它们。
请问有人能告诉我在“????”中需要添加哪个异常才能捕获上述列表中的异常吗?
附注:我正在使用Spring ROO。因此,我正在.aj文件中更改代码。请不要将此问题关闭为重复项。在关闭此问题之前,我期望任何人能为我的问题提供答案。

我尝试将“????”替换为“Exception”,并且它可以正常工作。但是我不想使用“Exception e”来捕获异常,我想要捕获特定的异常。 - user1514499
然еҗҺеңЁдҪ зҡ„catchеқ—дёӯжү§иЎҢSystem.out.printn(e)пјҢд»ҘжҹҘжүҫжҠӣеҮәзҡ„е…·дҪ“ејӮеёёжҳҜд»Җд№ҲпјҢе®ғеә”иҜҘдјҡжҳҫзӨәзұ»дјјдәҺпјҡjava.lang.NullPointerExceptionгҖӮ - John
你不能使用一个try和多个catch语句吗? - Dennis Meng
4个回答

2
作为最后的手段,你可以捕获通用异常exception
public String merge()
{
     try{
          //code to merge
        }
     catch(Exception e){
         //handle e here.
     }
}

在Spring-Roo中,所有的异常都会被抛出并转发到web-mvc-config.xml和web.xml中配置的错误页面。因此,我必须抛出异常。 - user1514499

1

最近我也遇到了同样的问题。似乎Spring在自己的异常类中包装了异常。
我通过以下方式解决了这个问题:

try {
   ...
}
catch(Exception e){
  System.out.println(e.getClass().getName());
}

通过这个,你将会发现到底抛出了什么异常;


1

嗯,你在catch中只是重新抛出异常吗?它应该是跟踪中的“最新”异常,所以是ConstraintValidationException

请注意,在Spring/Hibernate应用程序中,通常是您代码中的异常导致事务回滚。如果您捕获异常,可能会阻止这种情况发生,这可能会导致数据不一致。


我只想重新抛出异常,因为我想向用户显示错误页面(带有相关的错误信息)。 - user1514499
那么为什么一开始要捕获它呢? - hvgotcodes

1

当我有疑问时,我会尝试捕获Throwable并添加断点或将其记录下来,以便准确查看它是什么。然后相应地更改代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接