如何在 Grails 3 中捕获“org.springframework.web.multipart.MultipartException”

Posted

技术标签:

【中文标题】如何在 Grails 3 中捕获“org.springframework.web.multipart.MultipartException”【英文标题】:How to catch "org.springframework.web.multipart.MultipartException" in Grails 3 【发布时间】:2016-07-06 01:27:00 【问题描述】:

我很难发现错误:org.springframework.web.multipart.MultipartException

我有以下代码:

final class UploadTextCommand  
   MultipartFile contents
   static constraints = 
   

另外为了处理文件的发布我有这个动作:

def upload =  UploadTextCommand -> 
   ...code...

我在“application.yml”文件中有这些设置来强制错误:

controllers:
    upload:
        maxFileSize: 100
        maxRequestSize: 100

所以我可以可靠地重新创建异常,但在浏览器显示可怕的视图之前我无法捕获它:

HTTP Status 500 - Request processing failed; 
nested exception is org.springframework.web.multipart.MultipartException

请告诉我如何在 Grails 中捕获此错误。仅在上传操作中使用 try/catch 会失败。

应评论者的要求添加了堆栈跟踪:

javax.servlet.ServletException: org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (318635) exceeds the configured maximum (100000)
grails.plugin.cache.web.filter.AbstractFilter.logThrowable(AbstractFilter.java:116)
grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:70)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:73)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113)
org.springframework.boot.context.web.ErrorPageFilter.forwardToErrorPage(ErrorPageFilter.java:188)
org.springframework.boot.context.web.ErrorPageFilter.handleException(ErrorPageFilter.java:171)
org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:135)
org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:61)
org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:95)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:113)

【问题讨论】:

你能显示这个错误的详细堆栈跟踪吗? @MichalSzulc 我已经添加了堆栈跟踪。 【参考方案1】:

你可以在堆栈跟踪中找到:

请求被拒绝,因为它的大小 (318635) 超过 配置最大值(100000)

在你的代码中:

controllers:
    upload:
        maxFileSize: 100
        maxRequestSize: 100

你应该超过maxFileSize,但是如果你想处理异常check this solution。恕我直言,更清洁的解决方案将是您自己的 before filterinterceptor 的实施。

【讨论】:

以上是关于如何在 Grails 3 中捕获“org.springframework.web.multipart.MultipartException”的主要内容,如果未能解决你的问题,请参考以下文章

Grails Shiro LDAP用户/角色身份验证:如何/如何捕获和存储以供重用

如何在 grails 3 中运行单个集成测试?

如何在 grails 3.3.8 中模拟被测控制器的方法

如何在 Grails 3 中更改应用程序名称?

如何在Grails 3.3.10中使用自定义约束?

如何在 Grails 3.0 中使用 jQuery