是否可以从一个地方处理异常

时间:2014-04-17 08:53:14

标签: java spring exception spring-mvc exception-handling

我的spring mvc应用程序中有dao,service和action类。 我在Dao和Service类中抛出异常。现在在Action中,通常我必须编写try catch块,如果在dao和service中发生异常,它将从那里抛出,它将在catch块中运行。

我将显示一个错误jsp。

问题是我需要在所有动作方法中编写相同的catch块。

是否可以在动作方法中再次抛出它并从单点处理它,而不是在任何地方编写相同的代码。

请建议。

2 个答案:

答案 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框架为一般处理提供了许多有用的东西。