代码之家  ›  专栏  ›  技术社区  ›  lisak

Spring@ExceptionHandler处理多种异常

  •  23
  • lisak  · 技术社区  · 14 年前

    我不知道如何通过@ExceptionHandler处理一种以上的异常。

    我需要以编程方式处理这些异常,为此我需要一个共享引用。这是通过这个参考“例外情况”完成的吗?我不这么认为,因为异常不是这样被捕获的,那我该怎么做呢?

    我不能把所有的异常引用作为handler方法的参数,这是没有意义的,不能通过编程处理。我需要一个共享引用,这样我就可以对它使用“instanceof”或者将它作为一个普通的“异常”发送到其他地方

    @ExceptionHandler({DescriptionCstOrderException.class, SpecializationCstOrderException.class, NoUploadFileException.class,
                        DeadLineCstOrderException.class, DocumentCstOrderException.class, CommentCstOrderException.class})
    public String handleFormException(Exception ex, ActionRequest actionRequest) {
        logger.error(ex.getMessage());
        SessionErrors.add(actionRequest, ex.getClass().getName());  
        return "mainOrderForm";
      }
    

    附加问题:如果我想处理 org.springframework.web.multipart.MaxUploadSizeExceededException ,它不是从处理程序的任何方法抛出的?因为 @ExceptionHandler 只捕获从处理程序方法之一引发的异常。

    这个 exceptionHandler 方法可以放在某个扩展的父控制器中,但如果只使用 defaultAnnotationHandlerMapping ... ?

    谢谢你的帮助,我快疯了,这真让人沮丧。。。。

    4 回复  |  直到 5 年前
        1
  •  21
  •   amupoti NimChimpsky    9 年前

    @ExceptionHandler值可以设置为异常类型数组。如果抛出的异常与列表中的某个类型匹配,则将调用用匹配的@ExceptionHandler注释的方法。如果未设置注释值,则使用作为方法参数列出的异常类型。见 documentation 详细情况。

        2
  •  34
  •   laffuste user5637641    5 年前

    这个 @ExceptionHandler 值可以设置为异常类型数组。

    使用Spring中提到的异常数组的实现 documentation 会是:

    @ExceptionHandler({
        NotFoundException.class,
        MissingServletRequestParameterException.class
     })
    
        3
  •  -2
  •   benw    14 年前

    您的问题相当混乱,但是您的异常处理程序方法一次只能处理一个异常。它不会捕获多个异常,然后将它们都传递到handleFormException()方法中。如果需要以不同的方式处理这些异常类型,则应为每个异常处理程序方法创建一个异常处理程序方法,为方法指定该特定异常类型的参数,然后进行适当的处理。例如:

    @ExceptionHandler(DescriptionCstOrderException.class)
    public String handleDescriptionCstOrderException(DescriptionCstOrderException exception, ActionRequest actionRequest) {...}
    
    
    @ExceptionHandler(SpecializationCstOrderException.class)
    public String handleSpecializationCstOrderException(SpecializationCstOrderException exception, ActionRequest actionRequest) {...}
    
    // and so on...
    

    有关更多信息,请参阅Spring文档:

    http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-exceptionhandler