JAX-RS Wildfly 14: невозможно сжать, вернуть JSON - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над 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");
        }
    }
}

Что я могу сделать не так?

...