控制器中的@ExceptionHandler注释未捕获MaxUploadSizeExceededException

时间:2017-03-08 16:37:32

标签: spring spring-mvc

我尝试了一个非常简单的事情 - 捕获与文件上传相关的 MaxUploadSizeExceededException 错误。

这是我的spring-servlet.xml中的相关位:

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000" />
</bean>

这里的控制器中的 @ExceptionHandler 方法也可以处理文件上传内容

@ExceptionHandler(MaxUploadSizeExceededException.class)
public String handleException(MaxUploadSizeExceededException e, RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("uploadErrorMessage", e.getCause().getMessage());
    return "redirect:/page";
}

文件上传工作正常。但是,当我使用超过大小限制的文件进行测试时 - 它会抛出错误,并且永远不会调用ExceptionHanler的方法。

非常感谢任何有关其他内容的帮助或指示。

2 个答案:

答案 0 :(得分:0)

您是否可以尝试更改ExceptionHandler以查找LimitExceededException和MultiPartException而不是子Exceptions?

答案 1 :(得分:0)

尝试使用@ControllerAdvice创建一个单独的类,然后处理来自所有控制器的异常。

@ControllerAdvice
public class ExceptionControllerAdvice {

    @ExceptionHandler(MaxUploadSizeExceededException.class)
public String handleException(MaxUploadSizeExceededException e, RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("uploadErrorMessage", e.getCause().getMessage());
    return "redirect:/page";
}
}

因此,如果我们在@ControllerAdvice类的方法上定义@ExceptionHandler注释,它将应用于所有控制器。

您必须在spring-servlet.xml文件中定义以下内容。

<mvc:annotation-driven/>