我在Springboot application.properties中写了一些代码:
spring.http.multipart.max-file-size=1024KB
spring.http.multipart.max-request-size=1024KB
当上传的文件大于设置值时出现异常:
org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException:the request was rejected because.......
我想捕获这个异常并显示自定义格式,我该怎么办?
最佳答案
要捕获与 MultipartException
相关的异常以及类似的其他异常,更好的方法是创建一个全局异常 Controller 。该 Controller 将能够捕获给定的异常并向客户端返回一条人性化的错误消息。
@ControllerAdvice
public class ExceptionController {
NumberFormat numberFormatter = new DecimalFormat("#0.00");
@ExceptionHandler(value = Exception.class)
public ResponseEntity<?> handleException(Exception e) {
if(e instanceof MultipartException){
String message = "Invalid form data";
if(e.getCause() instanceof IllegalStateException){
if(((MultipartException) e).getRootCause() instanceof SizeException){
SizeException sizeException = (SizeException) ((MultipartException) e).getRootCause();
if(sizeException instanceof FileSizeLimitExceededException){
FileSizeLimitExceededException cause = (FileSizeLimitExceededException) sizeException;
message = "File Size should be less than: " + numberFormatter.format(cause.getPermittedSize()/Math.pow(2F, 20)) + "MB";
}
else if(sizeException instanceof SizeLimitExceededException){
SizeLimitExceededException cause = (SizeLimitExceededException) sizeException;
message = "Request Size should be less than: " + numberFormatter.format(cause.getPermittedSize()/Math.pow(2F, 20)) + "MB";
}
}
}
return new ResponseEntity<YourCustomResponseObject>(new
YourCustomResponseObject(message),
HttpStatus.ANY_ERROR_CODE_YOU_WANT);
}
}
}
以上示例将帮助您使用自定义消息捕获与最大文件大小和最大请求大小异常相关的异常。
已更新
如果您使用的文件非常大,那么您的浏览器可能会变得无响应。在这种情况下,如果您使用的是嵌入式 tomcat,请在配置文件中添加以下行
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbedded() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 means unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}
但是,如果您使用的是独立的 tomcat,则更改 server.xml
文件中的 maxSwallowSize
属性
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxSwallowSize="-1"/>
-1
表示请求的最大大小
关于java - Spring Boot application.properties上传文件异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45345839/