我有一个 ScalatraServlet 如下:
class MyServlet extends ScalatraServlet with FutureSupport with GZipSupport with JacksonJsonSupport {
..
}
运行时,我得到:
java.lang.IllegalStateException: STREAM
我还尝试在我的 ScalatraBootstrap 中添加一个码头过滤器,如下所示:
val gzip = context.addFilter("gzip-responses", classOf[NicsGzipFilter])
gzip.setInitParameter("mimeTypes", "text/html,text/plain,text/xml,application/json,application/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml")
gzip.setInitParameter("minGzipSize", "1") // TODO for testing only. Remove before committing
gzip.addMappingForUrlPatterns(java.util.EnumSet.allOf(classOf[DispatcherType]), true, "/*")
gzip.setAsyncSupported(true) // not sure if this is required?
在这种情况下,我得到了响应,但它们没有被压缩(尽管码头过滤器肯定会运行,因为它添加了一个可变编码标头)。
我似乎遇到了与此处报告的错误相同的错误:ScalatraServlet with AkkaSupport with GZipSupport。所以看起来这个错误并没有被修复。
关于它为什么不起作用的另一个建议是在这里提出的:https ://github.com/scalatra/scalatra/issues/247#issuecomment-12219667 。建议是 Scalatra 在同一响应中使用写入器和输出流调用输出,这是不允许的。
有小费吗?
谢谢。