我正在使用Spring Boot 2.1.3(使用标准的Tomcat嵌入式Web服务器)开发一个端点,用于上传图像,并且我想限制多部分上传的大小。我可以轻松地使用以下属性实现此目的:
spring:
servlet:
multipart:
max-file-size: 2MB
max-request-size: 2MB
但是我总是得到一个500错误,Spring无法捕获异常,因为是Tomcat抛出的异常,并且请求未到达我的RestController中的代码。
2019-03-02 10:12:50.544 ERROR [] [ o.a.c.c.C.[.[.[/].[dispatcherServlet]] [] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3917946) exceeds the configured maximum (2097152)] with root cause
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (3917946) exceeds the configured maximum (2097152)
我的ExceptionHandler就像这样,但是无论在注释中放入什么异常,它显然都不起作用:
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ResponseEntity handleMaxSizeException(Exception e) {
logger.warn(e.getMessage());
...
return status(HttpStatus.PAYLOAD_TOO_LARGE).body(...);
}
我已经尝试过使用先前提到的属性,但没有任何效果:
@Bean
public TomcatServletWebServerFactory containerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector ->
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1));
return factory;
}
我已经检查了以下问题(和其他问题...),但它们大多已过时或根本不起作用:
- Multipart文件最大大小异常 - spring boot嵌入式tomcat
- Spring中MaxUploadSizeExceededException没有调用异常处理方法
- 如何处理MaxUploadSizeExceededException
有人在解决这个问题吗?