github.com/phrase/openapi@v0.0.0-20240514140800-49e8a106740e/openapi-generator/templates/java/libraries/okhttp-gson/GzipRequestInterceptor.mustache (about) 1 {{>licenseInfo}} 2 3 package {{invokerPackage}}; 4 5 import okhttp3.*; 6 import okio.Buffer; 7 import okio.BufferedSink; 8 import okio.GzipSink; 9 import okio.Okio; 10 11 import java.io.IOException; 12 13 /** 14 * Encodes request bodies using gzip. 15 * 16 * Taken from https://github.com/square/okhttp/issues/350 17 */ 18 class GzipRequestInterceptor implements Interceptor { 19 @Override 20 public Response intercept(Chain chain) throws IOException { 21 Request originalRequest = chain.request(); 22 if (originalRequest.body() == null || originalRequest.header("Content-Encoding") != null) { 23 return chain.proceed(originalRequest); 24 } 25 26 Request compressedRequest = originalRequest.newBuilder() 27 .header("Content-Encoding", "gzip") 28 .method(originalRequest.method(), forceContentLength(gzip(originalRequest.body()))) 29 .build(); 30 return chain.proceed(compressedRequest); 31 } 32 33 private RequestBody forceContentLength(final RequestBody requestBody) throws IOException { 34 final Buffer buffer = new Buffer(); 35 requestBody.writeTo(buffer); 36 return new RequestBody() { 37 @Override 38 public MediaType contentType() { 39 return requestBody.contentType(); 40 } 41 42 @Override 43 public long contentLength() { 44 return buffer.size(); 45 } 46 47 @Override 48 public void writeTo(BufferedSink sink) throws IOException { 49 sink.write(buffer.snapshot()); 50 } 51 }; 52 } 53 54 private RequestBody gzip(final RequestBody body) { 55 return new RequestBody() { 56 @Override 57 public MediaType contentType() { 58 return body.contentType(); 59 } 60 61 @Override 62 public long contentLength() { 63 return -1; // We don't know the compressed length in advance! 64 } 65 66 @Override 67 public void writeTo(BufferedSink sink) throws IOException { 68 BufferedSink gzipSink = Okio.buffer(new GzipSink(sink)); 69 body.writeTo(gzipSink); 70 gzipSink.close(); 71 } 72 }; 73 } 74 }