代码之家  ›  专栏  ›  技术社区  ›  Oreste Viron

用jersey压缩gzip的问题

  •  1
  • Oreste Viron  · 技术社区  · 7 年前

    例如:

    {
      "page": 1,
      "pageCount": 1,
      "list": [
        {
          "pk": 1,
          "state": "ACTIVE",
          "locationType": "ADDRESS",
          "title": "titre",
          "description": "hello",
          "country": "osef",
          "city": "osef",
          "address": "osef",
          "inAgendaCount": 0,
          "dateBeginning": 1498734400758
        }
      ]
    }
    

    但当我启用gzip压缩时,响应如下:

    {
      "page": 1,
      "pageCount": 1,
      "list": [
        {
        }
      ]
    }
    

    列表中的所有事件都被删除。 这是我的Web服务:

    @Component
    @Path("/")
    public class EventSearchWebService {
    
        @Autowired
        private EventSearchController controller;
    
        @GET
        @Path("/event/search")
        @Produces(MediaType.APPLICATION_JSON)
        @JsonView(SmallView.class)
        public Response search(@QueryParam("keywords") String keywords, @DefaultValue("1") @QueryParam("page") Long page) {
    
            if (keywords != null && !keywords.trim().isEmpty()) {
                return Response.status(200).entity(controller.search(keywords, page)).build();
            } else {
                return Response.status(200).entity(controller.search(page)).build();
            }
        }
    }
    

    我的资源配置和压缩:

    @Configuration
    @ApplicationPath("/rest")
    public class JerseyConfig extends ResourceConfig {
    
        public JerseyConfig() {
            // Compression
            register(EntityFilteringFeature.class);
            EncodingFilter.enableFor(this, GZipEncoder.class);
    
            register(EventSearchWebService.class);
    
            register(MultiPartFeature.class);
            register(ValidationFeature.class);
            register(ValidationExceptionMapper.class);
            register(CrossDomainContainerResponseFilter.class);
    
            registerClasses(AccessDeniedExceptionMapper.class,
                    GeneralUserExceptionMapper.class,
                    NoResultExceptionMapper.class,
                    UnknowExceptionMapper.class,
                    ValidationExceptionMapper.class);
        }
    }
    

    public class PageableList<E> {
    
        @Getter
        @Setter
        @JsonView(value = {SmallView.class, FullView.class})
        private long page;
    
        @Getter
        @Setter
        @JsonView(value = {SmallView.class, FullView.class})
        private long pageCount;
    
        @Getter
        @Setter
        @JsonView(value = {SmallView.class, FullView.class})
        private List<E> list;
    
        public PageableList() {
            super();
        }
    
        public PageableList(List<E> list) {
            super();
            this.list = list;
        }
    }
    

    日志中没有错误。有人知道发生了什么事吗?

    非常感谢。

    Can not resolve PropertyFilter with id 'org.vagrant.server.entity.EventEntity'; no FilterProvider configured (through reference chain: java.util.ArrayList[0])
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Oreste Viron    7 年前

    问题出在ResourceConfig中。

    register(EntityFilteringFeature.class);
    

    是无用的,并导致错误。