Spring-mvc控制器和exception处理

想问一个关于spring-mvc控制器的最佳实践问题。 请查看以下代码:

@Autowired SomeService service; @RequestMapping (...) public @ResponseBody Response createSomething () { try { serviceResponse = service.doSomething(); //create a success response and return } catch (SomeServiceException e) { //create an error response and return } } 

error handling是否在控制器级别正常进行? 或者服务类是否应该抛出如上所示的exception。 请检讨并告诉我。

我会说你有三种策略,具体取决于你的用例。

大致有三种策略: HandlerExceptionResolver,@ ExceptionHandler以及在action内部处理exception。

这些用例包括:整个应用程序的常见exception处理程序,整个控制器,相应的特定操作。

我想说最好的做法是使用@ExceptionHandler。 由于在控制器方法中处理exception的缺点是它使代码的可读性降低,并且可能在许多控制器方法中重复。

我建议为控制器安装一个基类,并定义@ExceptionHandler。 这样它就可以用于许多不同的控制器,而不需要任何代码重复。 这比exception解析器方法更具可读性,但可以结合使用。

服务类可以/应该抛出exception..您可以在控制器中处理这些exception以进行日志记录。因此,您可以根据控制器上捕获的exception显示相应的错误页面。但这将是乏味的..更好的尝试弹簧exception处理..http://www.mkyong.com/spring-mvc/spring-mvc-exception-handling-example/

在Handler类的bean定义文件中定义bean。 当程序中抛出任何exception时,将调用resolveException方法。

  public class Handler implements HandlerExceptionResolver { public Handler() { } public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { if(ex instanceof ErrorType1Exception)) { ModelAndView test = new ModelAndView("errorpage1jsppage"); return test; } else if(ex instanceof ErrorType2Exception)) { ModelAndView test1 = new ModelAndView("errorpage2jsppage"); return test1 } } }