我使用的是Spring3.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()
方法。处理此异常的方法是什么?我是不是漏掉了什么?
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);
}
}
@ExceptionHandler(value={Exception.class})
在任何情况下都不会调用responseentity()
方法。
一般来说,如果可能的话,我希望每个控制器基(控制器级别)处理此异常。为此,一个@ExceptionHandler
注释方法应该只对该特定控制器有效,而不是对整个应用程序全局有效,因为我的应用程序中只有几个web页面处理文件上载。当出现此异常时,我只想在当前页上显示一条用户友好的错误消息,而不是重定向到web.xml
文件中配置的错误页。如果这是不可行的,那么无论如何都应该处理这个异常,而不需要我刚才表达的任何自定义要求。
这两种方法对我都不起作用。我找不到更多关于处理此异常的信息。它是否需要在XML文件中的某个地方或其他地方进行额外的配置?
根据发布的stacktrace,在请求到达dispatcher servlet之前抛出MaxuploadsizeExcepted
异常。因此,您的exceptionhandler不会被调用,因为在抛出异常时,目标控制器尚未确定。
如果查看stacktrace,可以看到异常抛出在HiddenhTtpMethodFilter
中,它获取multipart-request的所有参数以及“to big”upload-data参数。
控制器处理多部分上传是否需要HiddenhTtpMethodFilter
?如果没有,请从上传处理控制器中排除此筛选器。
我正在为Spring MVC中的异常处理开发示例演示应用程序。我正在尝试使用@ControllerAdvice处理异常 我遵循了本链接中描述的步骤。 但是当我运行我的应用程序时,我得到了以下错误 以下是我正在学习的课程 应用程序异常。JAVA 控制器类 ApplicationExceptionController。JAVA 下面是GlobalExceptionHandler类 GlobalExce
我是Spring Boot的新手。在一个项目中,我想异步发送一封电子邮件。下面,你可以看到我到目前为止有什么。 我遇到的一个问题是:外部系统向控制器发送POST请求。如果在生成或发送邮件时发生异常,则不会调用。因此,控制器总是返回HTTP 201,因此调用者认为一切正常。 我将如何集成我的异常处理程序与在这样的异步方法? 控制器 服务 异常处理程序
我有一个Spring Boot服务,其中包含一些用于并行异步调用的代码,如下所示: CompletableFuture future1=accountManager。getResult(url1); CompletableFuture future2=accountManager。getResult(url2); 复杂的Future.allOf(未来1,未来2)。 字符串result1=futur
我试图在一个具有SOAPendpoint和Rest控制器的Spring Boot应用程序中处理异常。 提前谢谢你。
我对Spring批处理跳过逻辑有一些问题。我已经配置了一个作业的步骤来跳过两个异常(SQLIntegrityConstraintViolation异常和乐观锁定失败异常): 但当作业运行时,由于我将其配置为跳过的异常,作业以未知状态完成: 我做错什么了吗?我希望这一步跳过负责抛出其中一个异常的项,并继续处理,以便以完成状态结束。
我有以下方法: 在序列化期间调用。 枚举异常扩展了异常 我的控制器方法: 事务类: 在此setter中,引发枚举异常 在调试方法时,我看到它正在从响应EntityExceptionHandler类调用方法而不是我的方法 在抛出EnumException的情况下,我得到400状态代码和空响应正文。 为什么不执行异常处理程序方法? 以下是日志: