我有一个Web服务调用,通过它可以上传zip文件.然后将文件转发到另一个服务进行存储,解压缩等.现在文件存储在文件系统中,然后构建FileSystemResource.
Resource zipFile = new FileSystemResource(tempFile.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
我可以使用ByteStreamResource以节省时间(在转发之前不需要在磁盘上保存文件)但是为此我需要构建一个字节数组.如果是大文件,我将收到"OutOfMemory:java heap space"错误.
ByteArrayResource r = new ByteArrayResource(inputStream.getBytes());
Run Code Online (Sandbox Code Playgroud)
任何使用RestTemplate转发文件而不会出现OutOfMemory错误的解决方案?
我不知道以下更改是一个问题还是意图.
<g:include view="line.gsp" params="['label':'test', 'progress':false]"/>
Run Code Online (Sandbox Code Playgroud)
然后line.gsp aways中的表达式求值为true,因为'progress'参数的类型是String,而不是Boolean.
class is: ${params.progress.getClass()}
<g:if test="${params.progress}">
this should not be displayed
</g:if>
Run Code Online (Sandbox Code Playgroud)
请注意,这同样适用于其他类型,而不仅仅是布尔值.我正在使用grails 3.3.8这不会发生在grails 2.5.2中.
我没有在网上找到任何关于这个的信息,所以这就是我在这里问的原因.谢谢.
编辑:
正如Daniel所说,我也尝试过grails 3.3.2.我刚刚使用grails create-app创建了一个应用程序,并修改了现有的index.gsp以包含line.gsp,如上面的代码所示.
class SimpleTest {
void met( Object a ) {
println "Object"
}
void met( String b ) {
println "String"
}
static main( args ) {
SimpleTest i = new SimpleTest()
i.met(null)
}
}
Run Code Online (Sandbox Code Playgroud)
此代码将生成输出"Object".它不会选择最专业的方法版本.在这种情况下,String比Object更专业,因此该规则不适用.