【问题标题】:Spring @ExceptionHandler handling multiple kinds of exceptionsSpring @ExceptionHandler 处理多种异常
【发布时间】:2011-05-12 09:17:14
【问题描述】:

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

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

我不能把所有的异常引用作为处理程序方法的参数,这没有意义,不能以编程方式处理。我需要一个共享引用,以便我可以在其上使用“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...?

感谢任何帮助,我快疯了,这非常令人沮丧....

【问题讨论】:

    标签: spring exception


    【解决方案1】:

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

    Springdocumentation 中提到的使用异常数组的实现如下:

    @ExceptionHandler({
        NotFoundException.class,
        MissingServletRequestParameterException.class
     })
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您的问题相当令人困惑,但您的异常处理程序方法一次只能处理一个异常。它不会捕获多个异常,然后将它们都传递给您的 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

        【讨论】:

        • 我确实想以同样的方式处理它们。我将它们放入 sessionErrors 和 viewlayer 中,然后 javascript 以不同的方式处理它们。我想知道的是,我的示例是否正确,因为handleFormException方法没有捕获到注释值列表中提到的类型之一的异常...
        • 如果我为一种异常类型声明一种方法,它可以工作......这很奇怪......顺便说一句,你知道如何处理在处理程序之外抛出的异常吗?我的意思是使用这个@ExceptionHandlers...正如我提出的附加问题...
        猜你喜欢
        • 2019-11-23
        • 2016-04-27
        • 2011-02-21
        • 1970-01-01
        • 2011-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多