我正在使用 Spring MVC,但我不知道如何处理未处理的异常。我想在代码中引发异常时向用户显示一些自定义错误文本。我不想在 web.xml 中设置 404 页面,因为这样所有异常都会转到一个页面,而这不会向用户提供任何信息。
这可能是一个愚蠢的例子,但我的 @Service
类中有其他代码抛出异常。
@Controller
public class Control {
@RequestMapping(value = "something", method = RequestMethod.POST)
public String Form(HttpServletRequest request) {
String name = request.getParameter("name");
Validate v = Validate();
v.giveAName(name);
}
@Service
public class Validate {
public void giveAName(String name){
if (name==null) {
throw new MyException("Name is null");
} catch (MyException e) {
e.getMessage();
//How do I here pass that getMessage value ("Name is null") back to Control-class
//(and from there to JSP)?
}
}
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
最佳答案
Spring MVC 有两种简洁的方法来处理来自服务层的异常。
- 首先在 Controller 级别,您可以使用
@ExceptionHandler
注释方法。任何Exception
都会调用此方法它声明,可以像任何其他 Controller 方法一样访问请求、响应或 session ,并且可以返回 View 名称或ModelAndView
- 接下来在全局级别(由所有 Controller 共享)您可以设置
HandlerExceptionResolver
。您应该注意到,默认情况下,DispatcherServlet
注册DefaultHandlerExceptionResolver
处理某些标准 Spring MVC 异常。
您可以在 Spring reference manual 中找到更多详细信息
编辑:使用 @ExceptionHandler
的示例:
在服务层中,您只需抛出异常即可:
@Service
// as MyException is not a RunTimeException it must be declared
public class Validate throws MyException {
public void giveAName(String name){
if (name==null) {
throw new MyException("Name is null"); // not caught locally ...
}
}
在 Controller 中,放置一个捕获异常的异常处理程序:
@ExceptionHandler(MyException.class)
public ModelAndView handler(MyException me){
ModelAndView model = new ModelAndView("index");
model.addObject("error", me.getMessage());
return model;
}
}
关于java - 处理来自 @Service 类的 JSP 页面异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868363/