Я работаю над Java EE 8
проектом и использую Wildfly 14
для развертывания.Я пытаюсь Gzip ответ JSON, когда gzipflag: 1
передается в заголовке запроса, gzip возвращает символ ▼
.Удивительно, но когда я сам получаю этот JSON через GZIPOutputStream
, я могу это сделать.
Вот код класса Demo
:
package com.demo.boundary;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
/**
* Demo
*/
@Path("demo")
public class Demo {
@Path("demo")
@GET
public Response readFile() {
try {
String jsonFile = Files.readAllLines(Paths.get("C:\\demo.json")).stream().collect(Collectors.joining("\n"));
GZIPOutputStream gzipStream = new GZIPOutputStream(new FileOutputStream("C:\\gzipped.js.gz"));
gzipStream.write(jsonFile.getBytes());
gzipStream.finish();
gzipStream.close();
return Response.ok(jsonFile).build();
} catch (IOException e) {
e.printStackTrace();
}
return Response.ok().build();
}
}
Вот кодGzipFilter
класс:
package com.demo.config;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.GZIPOutputStream;
import javax.inject.Inject;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class GzipFilter implements ContainerResponseFilter {
@Inject
private Logger logger;
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
if ((requestContext.getHeaderString("gzipflag") == null
|| requestContext.getHeaderString("gzipflag").equals("1"))) {
logger.log(Level.INFO, "Gzip flag is ON");
GZIPOutputStream gzippedOutputStream = new GZIPOutputStream(responseContext.getEntityStream());
responseContext.setEntityStream(gzippedOutputStream);
responseContext.getHeaders().putSingle("Content-Encoding", "gzip");
} else {
logger.log(Level.INFO, "Gzip flag is OFF");
}
}
}
Что я могу сделать не так?