我正在使用 Spring 3.2.0。根据这个答案,我在带注释的控制器中有相同的方法,它实现了HandlerExceptionResolver
接口,例如,
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
Map<String, Object> model = new HashMap<String, Object>(0);
if (exception instanceof MaxUploadSizeExceededException) {
model.put("msg", exception.toString());
model.put("status", "-1");
} else {
model.put("msg", "Unexpected error : " + exception.toString());
model.put("status", "-1");
}
return new ModelAndView("admin_side/ProductImage");
}
Spring 配置包括,
<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>10000</value>
</property>
</bean>
当文件大小超过时,应该调用前面的方法,它应该自动处理异常,但它根本不会发生。resolveException()
即使发生异常,也不会调用该方法。处理这个异常的方法是什么?我错过了什么吗?
此处也指定了相同的内容。我不确定为什么它在我的情况下不起作用。
我已经尝试了以下方法,@ControllerAdvice
但它也没有奏效。
package exceptionhandler;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public final class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {MaxUploadSizeExceededException.class})
protected ResponseEntity<Object> handleConflict(RuntimeException ex, WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.CONFLICT, request);
}
}
我也试图把冗长的 - Exception
。
@ExceptionHandler(value={Exception.class})
ResponseEntity()
在任何情况下都不会调用该方法。
一般来说,如果可能的话,我想按控制器基础(控制器级别)处理这个异常。为此,一个@ExceptionHandler
带注释的方法应该只对那个特定的控制器有效,而不是对整个应用程序全局有效,因为我的应用程序中只有几个网页处理文件上传。当这个异常发生时,我只想在当前页面显示一个用户友好的错误信息,而不是重定向到web.xml
文件中配置的错误页面。如果这甚至不可行,那么无论如何都应该处理这个异常,而不需要我刚才表达的任何自定义要求。
这两种方法都不适合我。我找不到更多关于处理这个异常的信息。它是否需要在 XML 文件中的某处或其他地方进行额外配置?
抛出异常后我得到的内容可以在以下快照中看到。