Просто хотел, чтобы вы знали, что я закончил делать.
Я сделал оболочку класса запроса, которая выглядит следующим образом:
public class GzippedResponse extends HttpServletResponseWrapper{
private PrintWriter pw;
private GzippedResponse(HttpServletResponse response){
super(response);
try{
pw = new PrintWriter(new GZIPOutputStream(response.getOutputStream()));
}catch(Exception e){
throw new ApiInternalException("Failed to create a Gzipped Response", e);
}
}
public static GzippedResponse wrap(HttpServletResponse response){
return new GzippedResponse(response);
}
@Override
public PrintWriter getWriter() throws IOException {
return pw;
}
}
А затем на моем BaseAction
, который по сути является TemplateMethod для других «действий», я обертываю ответ следующим образом:
if(supportsCompression(request)){
response.setHeader("Content-Encoding", "gzip");
response = GzippedResponse.wrap(response);
}
action.macroExecute(request,response);
Я думаю, это достаточно чисто. Если вы найдете что-то, что можно улучшить, пожалуйста, дайте мне знать. Спасибо всем за ответы!