Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing binary content directly to the client bypassing the Grails view layer

Tags:

grails

The following action is meant to write the binary content of bytes directly to the client completely bypassing the Grails view layer:

def actionName = {
  byte[] bytes = ...
  ServletOutputStream out = response.getOutputStream()
  out.write(bytes)
  out.flush()
  out.close()
  return false
}

I was under the impression that return false would make Grails completely skip the view layer. However, that appears not to be the case since the above code still makes Grails search for /WEB-INF/grails-app/views/controllerName/actionName.jsp (which fails with a 404, since no such file exists).

Question:

  • Given the code above, how do I completely bypass the view layer in Grails?
like image 678
knorv Avatar asked Jan 24 '23 01:01

knorv


1 Answers

You should return null or nothing at all, which is interpreted as null. Here's some working code from an action that sends a dynamically generated PDF:

def pdf = {
   byte[] content = ...
   String filename = ...
   response.contentType = 'application/octet-stream'
   response.setHeader 'Content-disposition', "attachment; filename=\"$filename\""
   response.outputStream << content
   response.outputStream.flush()
}
like image 169
Burt Beckwith Avatar answered Jan 25 '23 15:01

Burt Beckwith