Java 是否可以从单个位置处理异常
我在SpringMVC应用程序中有dao、服务和操作类。 我在Dao和服务类中抛出异常。现在在实际操作中,通常我必须编写try-catch块,若dao和服务中发生异常,它将从那个里抛出,并在实际操作中进入catch块 我将显示一个错误jsp 问题是我需要在所有动作方法中编写相同的catch块 是否有可能在action方法中再次抛出它,并从一个点处理它,而不是到处编写相同的代码Java 是否可以从单个位置处理异常,java,spring,exception,spring-mvc,exception-handling,Java,Spring,Exception,Spring Mvc,Exception Handling,我在SpringMVC应用程序中有dao、服务和操作类。 我在Dao和服务类中抛出异常。现在在实际操作中,通常我必须编写try-catch块,若dao和服务中发生异常,它将从那个里抛出,并在实际操作中进入catch块 我将显示一个错误jsp 问题是我需要在所有动作方法中编写相同的catch块 是否有可能在action方法中再次抛出它,并从一个点处理它,而不是到处编写相同的代码 请建议。我认为您正在寻找横切异常处理和好消息,您正在使用Spring MVC是的,您可以使用此功能 您只需将服务中的cu
请建议。我认为您正在寻找横切异常处理和好消息,您正在使用Spring MVC是的,您可以使用此功能 您只需将服务中的
customExceptions
或任何其他异常
抛出到操作方法
假设这是您的服务:
@Service
public class MyService {
public void someMethod throws RuntimeException {
...
}
}
在控制器方法中:
@Controller
public class MyController {
@Autowired
MyService service;
@RequestMapping("/someuri"){
try {
service.someMethod();
} catch {
throw new RuntimeException();
}
}
@ExceptionHandler(RuntimeException.class)
public ModelAndView handleException(RuntimeException ex) {
ModelAndView model = new ModelAndView("errorpage");
return model;
}
}
用
ExceptionHandler
注释的handleException
方法是异常处理的建议方法,它将在控制器内抛出RuntimeException
时被调用,您可以像这样处理所有其他异常。您还可以看看Spring集成
。它提供了网关、过滤器和通道的使用。每个都可以分配一个请求、响应和错误通道。甚至还有一个默认的错误处理程序。如果所有数据都流经特定通道,则使用自定义错误处理程序如下所示:
@MessageEndpoint
public class MyErrorHandler {
@ServiceActivator(inputChannel = "errorChannel")
public String handle(String messsage) {
// do whatever you like
}
}
集成框架为一般处理提供了很多有用的东西。动作类是Spring MVC控制器吗?可能有助于取消选中您的异常(扩展
RuntimeException
),并且您不需要所有这些try-catch使代码混乱(我打赌它们在catch块中除了log和/或throw之外没有做任何有用的事情)