Java 处理@Service类中JSP页面的异常
我正在做SpringMVC,但我不知道如何处理未处理的异常。我想在代码中抛出异常时向用户显示一些自定义错误文本。我不想在web.xml中设置一个404页面,因为这样所有的异常都会转到一个页面,而这对用户来说并不是信息 这可能是一个愚蠢的例子,但我的Java 处理@Service类中JSP页面的异常,java,jsp,spring-mvc,Java,Jsp,Spring Mvc,我正在做SpringMVC,但我不知道如何处理未处理的异常。我想在代码中抛出异常时向用户显示一些自定义错误文本。我不想在web.xml中设置一个404页面,因为这样所有的异常都会转到一个页面,而这对用户来说并不是信息 这可能是一个愚蠢的例子,但我的@Service-类中还有其他代码抛出异常 @Controller public class Control { @RequestMapping(value = "something", method = RequestMethod.POST
@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);
}
}
我可能会从
RuntimeException
扩展MyException
,而不是Exception
,然后将try/catch块放在控制器中。然后您可以在那里捕获MyException。也就是说,异常中的错误消息通常不是向用户显示的最佳方式,因此您可能需要对spring自定义错误消息进行处理。spring MVC有两种干净整洁的方法来处理来自服务层的异常
- 首先,在控制器级别,可以使用
注释方法。此方法将为它声明的任何@ExceptionHandler
异常调用
,可以像任何其他控制器方法一样访问请求、响应或会话,并且可以返回视图名称或
ModelAndView
- 接下来,在全局级别(由所有控制器共享),您可以设置
。您应该注意到,默认情况下,HandlerExceptionResolver
注册一个DispatcherServlet
来处理某些标准Spring MVC异常DefaultHandlerExceptionResolver
@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 ...
}
}
在控制器中,放置一个将捕获异常的异常处理程序:
@ExceptionHandler(MyException.class)
public ModelAndView handler(MyException me){
ModelAndView model = new ModelAndView("index");
model.addObject("error", me.getMessage());
return model;
}
}
我不能将try/catch块放到控制器上,因为它在架构上看起来很糟糕。@TomJoad为什么?对于你所有的东西来说,这是一个特殊的例外还是一个普通的例外?谢谢你的评论!我想你把我推向了正确的方向,但我仍然无法解决它。令人沮丧的。我现在得到的是: