我的spring mvc应用程序中有dao,service和action类。 我在Dao和Service类中抛出异常。现在在Action中,通常我必须编写try catch块,如果在dao和service中发生异常,它将从那里抛出,它将在catch块中运行。
我将显示一个错误jsp。
问题是我需要在所有动作方法中编写相同的catch块。
是否可以在动作方法中再次抛出它并从单点处理它,而不是在任何地方编写相同的代码。
请建议。
答案 0 :(得分:0)
我认为您正在寻找跨领域的异常处理和好消息,您正在使用 Spring MVC 是的,您可以使用此功能。
您需要做的就是将您的服务中的CustomExcptions
或其他Exceptions
投放到您的操作方法中。< / p>
让我们说这是您的服务:
@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;
}
}
使用handleException
注释的ExceptionHandler
方法是您的异常处理建议方法,只要RuntimeException
在您的控制器内部被抛出,它就会被调用,您可以为所有人保持这样的状态其他例外。
答案 1 :(得分:0)
您还可以查看Spring Integration
。它提供了网关,过滤器和通道的使用。每个都可以分配一个请求,响应和错误通道。或者甚至有一个默认的错误处理程序。如果所有数据都流经特定通道,则具有自定义错误处理程序的操作非常简单:
@MessageEndpoint
public class MyErrorHandler {
@ServiceActivator(inputChannel = "errorChannel")
public String handle(String messsage) {
// do whatever you like
}
}
Integration框架为一般处理提供了许多有用的东西。