Я пишу веб-сервис RESTful в Джерси 2. Я хочу поддержать кодировку Gzip для ответов.После этого ответа я включил org.glassfish.jersey.server.filter.EncodingFilter
в своем классе ResourceConfig
.
public class MyWebService extends ResourceConfig {
public MyWebService() {
register(EncodingFilter.class);
register(GZipEncoder.class);
register(DeflateEncoder.class);
}
}
В своем классе ресурсов я возвращаю объект javax.ws.rs.core.Response
.
@GET
@Path("api/configs")
public Response listConfigs() throws Exception {
List<UserConfig> configs = configService.getAll();
return Response.ok().entity(configs).build();
}
Теперь, когда я нажимаю на этот API, я получаю ответ, но заголовки ответа не содержат заголовок Content-Encoding
, скорее он содержит Transfer-Encoding: chunked
.
Запрос:
> GET /api/configs HTTP/1.1
> Accept-Encoding: gzip
Ответ:
> HTTP/1.1 200
> Transfer-Encoding: chunked
* Received 14.8 KB chunk
* Received 504 B chunk
* Received 15.2 KB chunk
* Received 506 B chunk
* Received 15.1 KB chunk
* Received 514 B chunk
В ответе нет ни заголовка Content-Encoding: gzip
, ни заголовка Content-Length
.
Я использую Jersey 2.27
on Tomcat 9
.
Есть ли какая-то другая конфигурация, которую я пропускаю?Как получить эти два заголовка и получить ответ в виде сжатого gzip вместо получения фрагментированного ответа?
Редактировать : я заметил, что при отправке больших файлов (> 1000 КБ) я получаюзаголовки Content-Encoding: gzip
и Transfer-Encoding: chunked
.