0

我想捕捉这个异常,而不是简单地向最终用户返回 500,这是一种糟糕的体验,至少在我的应用程序中是这样。目的是让用户返回表单页面并提供一些反馈,让他们再试一次。

当前的经验是让用户返回 500 并将以下内容打印到日志中;

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (157552) exceeds the configured maximum (1024)
4

1 回答 1

2

将@james-kleeh 归功于这一领先优势;

StandardServletMultipartResolver但是当我扩展默认使用的实现时,我只能在 Grails 4.0.0.M2上使用它。然后继续从 config (yaml) 中解析 maxFileSize 限制。

public class MyMultipartResolver extends StandardServletMultipartResolver {

    static final String FILE_SIZE_EXCEEDED_ERROR = "fileSizeExceeded"

    public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) {
        try {
            return super.resolveMultipart(request)
        } catch (MaxUploadSizeExceededException e) {
            request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true)
            return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap<String, MultipartFile>(), new LinkedHashMap<String, String[]>(), new LinkedHashMap<String, String>());
        }
    }
}

在 resources.groovy 中有以下内容;

// catch exception when max file size is exceeded
multipartResolver(MyMultipartResolver)

您需要随后检查控制器中的FILE_SIZE_EXCEEDED_ERROR属性并进行相应处理。

于 2019-06-19T07:32:50.233 回答