gpt4 book ai didi

grails - 使用HttpServletResponse导出文件下载的Grails错误

转载 作者:行者123 更新时间:2023-12-02 15:34:53 25 4
gpt4 key购买 nike

我在Grails应用程序中使用opencsv将我的Person域类的属性导出到CSV。但是,我收到以下错误:

路径为[/ myapp]的Servlet [default]的Servlet.service()抛出异常[请求处理失败;嵌套的异常是org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException:错误处理GroovyPageView:此响应已调用getOutputStream(),其根本原因是
消息:已为此响应调用getOutputStream()

通过在线搜索,我认为答案可能是针对HttpServletResponse响应在某处实现一些responseComplete()方法。但是,我不确定如何执行此操作。有任何想法吗?这是我的代码:

def export = {
def course = Course.get(params.id)
if(course){
def persons = course ? Person.findAllByCourse(course) : []


response.setHeader("Content-disposition",
"attachment; filename=people.csv")
response.contentType = "text/csv"
def out = response.outputStream
out.withWriter { writer ->

String[] properties = new String[3]
def csvWriter = new CSVWriter(writer)
persons.each { person ->

properties[0] = person.firstName
properties[1] = person.lastName
properties[2] = person.email
properties[3] = person.phone
properties[4] = person.address1
properties[5] = person.address2
properties[6] = person.city
properties[7] = person.state
properties[8] = person.zip5

csvWriter.writeNext(properties)
}
csvWriter.flush()
}

}

最佳答案

您的问题可能源于在 Controller 中显式写入输出流,然后是从操作返回时GSP呈现的默认行为。您可以通过一些修复方法来检查How to prevent Grails from rendering the default view?的另一种情况。我目前使用的机器上没有grails来重现此问题,但听起来像在闭包末尾添加显式的return null可能会有所帮助。或者通过render生成一些 token 输出或200状态代码。

关于grails - 使用HttpServletResponse导出文件下载的Grails错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com