java - 处理来自 @Service 类的 JSP 页面异常

标签 java jsp spring-mvc

我正在使用 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/

相关文章:

Java:如何对对象列表进行排序?

Java8 : Transform Map<String, List<String>> 通过连接值进入 Map<String,String>

java - Java 中使用 boolean 值的用户循环

java - JSP 查询减表值

java - Spring MVC 休息 : static files unaccessible because of url-pattern

spring - <task :annotation-driven> in spring 4. 3 的注释是什么

java - 如何使用 GsonHttpMessageConverter 获取 oauth token ?

java - Spring MVC Hibernate session 错误

java - 跨浏览器cookie不一致?

spring - Thymeleaf 与 Spring MVC 3