我正在研究Playframework 2.x應用程序。我的應用程序中的控制器將JSON響應返回給瀏覽器/端點。我想知道是否有一種簡單的方法來啓用響應主體的GZIP壓縮。GZIP PlayFramework 2.0中的響應正文
5
A
回答
2
gzip'ing是相當多的與Apache前端完整的蛋糕。
在Apache的2.4 gzip的使用了一組基本的內容類型可能看起來像通過Location
塊處理:
<Location />
...
AddOutputFilterByType DEFLATE text/css application/x-javascript text/x-component text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon
SetOutputFilter DEFLATE
</Location>
3
目前在玩2.0.4,對於非資產沒有簡單的方法。
對於Java API,你可以使用:
public static Result actionWithGzippedJsonResult() throws IOException {
Map<String, String> map = new HashMap<String, String>();
map.put("hello", "world");
final String json = Json.toJson(map).toString();
return gzippedOk(json).as("application/json");
}
/** Creates a response with a gzipped string. Does NOT change the content-type. */
public static Results.Status gzippedOk(final String body) throws IOException {
final ByteArrayOutputStream gzip = gzip(body);
response().setHeader("Content-Encoding", "gzip");
response().setHeader("Content-Length", gzip.size() + "");
return ok(gzip.toByteArray());
}
//solution from James Ward for Play 1 and every request: https://gist.github.com/1317626
public static ByteArrayOutputStream gzip(final String input)
throws IOException {
final InputStream inputStream = new ByteArrayInputStream(input.getBytes());
final ByteArrayOutputStream stringOutputStream = new ByteArrayOutputStream((int) (input.length() * 0.75));
final OutputStream gzipOutputStream = new GZIPOutputStream(stringOutputStream);
final byte[] buf = new byte[5000];
int len;
while ((len = inputStream.read(buf)) > 0) {
gzipOutputStream.write(buf, 0, len);
}
inputStream.close();
gzipOutputStream.close();
return stringOutputStream;
}
1
在Play framework 2.2+
,可以使用GzipFilter。通過SBT可用:
libraryDependencies ++= filters
如果你是一個階的傢伙,這是值得期待的Gzip class。
0
隨着播放2.5,如所提到here:
這裏的一個示例代碼包括GZIP篩選(與樣品CORS濾波器展示添加多個過濾器一起):
import javax.inject.Inject;
import play.api.mvc.EssentialFilter;
import play.filters.cors.CORSFilter;
import play.filters.gzip.GzipFilter;
import play.http.HttpFilters;
public class Filters implements HttpFilters {
@Inject
CORSFilter corsFilter;
@Inject
GzipFilter gzipFilter;
@Override
public EssentialFilter[] filters() {
return new EssentialFilter[] { corsFilter, gzipFilter };
}
}
相關問題
- 1. Flask/Tornado中的Gzip響應
- 2. Playframework 2.3.4的gzip不工作
- 3. PlayFramework 2.0文件存儲
- 4. Node.js的放氣/ gzip的響應文本
- 5. 將Playframework 2.0構建系統擴展爲壓縮(gzip)資產
- 6. 航線playframework 2.0
- 7. Playframework 2.0 ClassNotFoundException
- 8. GZip壓縮的REST響應
- 9. IIS Express上的GZip響應
- 10. Playframework WS API響應處理
- 11. 在Eclipse中調試Playframework 2.0
- 12. Wildfly中REST響應的GZip壓縮
- 13. Gzip在asp.net中的響應和請求?
- 14. playframework 2.0音頻流
- 15. 在playframework中使用java訪問響應
- 16. Azure DocumentDb壓縮/ gzip響應
- 17. GZip分頁JSON響應
- 18. 解壓縮gzip http響應
- 19. mod_deflate gzip對MIME類型的響應,它不應該gzip
- 20. 在Vim中解壓縮gzip http響應
- 21. playframework成功響應的全局回調
- 22. 的Firefox擴展腐敗的gzip響應
- 23. playframework 2.0 VirtualFile fromRelativePath丟失
- 24. Playframework 2.0和Selenium入門
- 25. 如何使用Playframework 2.0
- 26. PlayFramework 2.0 Json to List [String] Conversion
- 27. 分塊編碼響應的gzip壓縮?
- 28. 的NSXMLParser initWithContentsOfURL - 解析gzip壓縮響應
- 29. 解壓gzip JSON響應的Android
- 30. 在Playframework 2.0中發送電子郵件
如果Play住的前後面end(apache,nginx等)然後在那裏做,簡單,直接,有效 – virtualeyes
如果你把這個作爲答案我會接受它:) – rOrlig
當然,我會包括我的方法,sec – virtualeyes