使用Grails 3呈现空的HTTP响应

jac*_*uac 6 grails groovy grails-3.1

我的目标是在Grails 3.1控制器方法中呈现HTTP响应

  • 一个给定的状态码(主要是204,但可能其他人,如200)
  • Content-Type,或Content-Encoding标题(因为没有内容,对吧?)

render(status: 204)添加一个任意Content-Type: application/json标题.

此外,grails.artefact.controller.support.ResponseRenderer.render()在这种情况下,此方法(请参阅参考资料)调用HttpServletResponse.sendError(),尽管它不是错误.这是为什么?

目前我们通过response直接处理来解决这个问题:

response.status = statusCode.value()
response.flushBuffer()
Run Code Online (Sandbox Code Playgroud)

但这会阻止我们在发送响应之前使用Grails拦截器 after方法执行某些操作.这就是为什么我们正在寻找一种不同的方式,它不会改变HTTP响应(比如添加Content-Type标题).

Sha*_*wal -3

你可以这样写:

response.status = 204
render ""
Run Code Online (Sandbox Code Playgroud)

这将以Content-Typeheader 作为text/html;charset=utf-8进行响应。要更改内容类型,您可以使用 Grails 中的内容协商。

要完全删除Content-Type标头,您可以尝试response.setHeader("Content-Type", "")

  • 这会添加 `Content-Type: text/html;charset=utf-8` 标头。 (2认同)