Java 在Grails2.3.7中上载文件时出错

Java 在Grails2.3.7中上载文件时出错,java,spring,grails,Java,Spring,Grails,我将在发送电子邮件时附上一个文件 <g:formRemote id="emailWidgetForm" name="emailOrderMailForm" enctype="multipart/form-data" on404="alert('not found!')" onLoading="showSpinner('emailWidget');" onComplete="hideSpinner();" url="[controller: 'emailSender', action:

我将在发送电子邮件时附上一个文件

<g:formRemote id="emailWidgetForm" name="emailOrderMailForm" enctype="multipart/form-data"
 on404="alert('not found!')"
 onLoading="showSpinner('emailWidget');" onComplete="hideSpinner();"
 url="[controller: 'emailSender', action:'sendPersonalEmailToCustomer']"
 action="${createLink(controller: 'emailOrder', action:  
 'sendPersonalEmailToCustomer')}"
 before="if( validateGivenForm( 'emailWidgetForm' ) ) { " after="}">

 <tr>
 <td><strong>Attachment</strong></td>
 <td><input type="file" size="10" name="attachments"/></td>
 </tr>
 <g:submitButton name="sendEmailButton" class="btn btn-primary pull-right"
                    value="Send  Email"/>
 </g:formRemote>
我在上面这一行有错误

错误是

groovy.lang.MissingMethodException: No signature of method:   
org.springframework.security.web.servletapi.HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper.getFile() is applicable for argument types: (java.lang.String) values: [attachments]
Possible solutions: getXML(), getPart(java.lang.String), getAt(java.lang.String), getAt(java.lang.String), getLocale(), getJSON()

请帮助我。

[编辑-根据Burt的评论,忽略这一点。它只能在Java/Spring中工作]

您可能必须将您的
请求
对象强制转换为通常的
多路径服务请求

MultipartHttpServletRequest mhsr = (MultipartHttpServletRequest) request
MultipartFile file = mhsr.getFile("attachments")

由于Spring security似乎正在注入它自己的
Servlet3Security ContextHolderAwareRequestWrapper
版本的
请求
,我猜这是有问题的,只需在配置文件中设置
grails.web.disable.multipart=true
,这就是Groovy-强制转换永远不会有助于访问属性或方法(使用
@CompileStatic
时除外,它需要像Java一样进行大量强制转换),因为它不是由您在编译时声称的类型来解析的,但根据它在运行时的实际情况。在任何ServletAPI应用程序中,“真实”容器创建的请求将被代理多次,Grails和Spring添加了额外的请求,SpringSecurity核心插件添加了一到两个请求,其中有很多层(大约7个iirc)
MultipartHttpServletRequest mhsr = (MultipartHttpServletRequest) request
MultipartFile file = mhsr.getFile("attachments")