Java REST实体筛选仅适用于单个实体,不适用于集合

Java REST实体筛选仅适用于单个实体,不适用于集合,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我正在构建一个基于REST的应用程序,我需要部分JSON过滤器响应功能,例如,api.movies.com/movies/1?fields=title,year将返回一个JSON,其中只包含id=1的电影的标题和制作年份 经过一番努力,我终于找到了一个非常简单的解决方案,没有太多的依赖项,应该可以很好地工作,对于上面的情况,它确实可以,但是如果REST服务返回一个集合而不是一个实体,它就不工作了,我调试了它,我可以过滤集合中的每个项,但是在返回时,我得到了一个奇怪的异常,因此,我将代码精简到基本

我正在构建一个基于REST的应用程序,我需要部分JSON过滤器响应功能,例如,api.movies.com/movies/1?fields=title,year将返回一个JSON,其中只包含id=1的电影的标题和制作年份

经过一番努力,我终于找到了一个非常简单的解决方案,没有太多的依赖项,应该可以很好地工作,对于上面的情况,它确实可以,但是如果REST服务返回一个集合而不是一个实体,它就不工作了,我调试了它,我可以过滤集合中的每个项,但是在返回时,我得到了一个奇怪的异常,因此,我将代码精简到基本内容,只留下以下内容:

public class PartialResponseFilter implements ContainerResponseFilter {
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
        System.out.println("Response filter");
        Object entity = responseContext.getEntity();
        responseContext.setEntity(entity);
}
但它仍然不起作用,是我遗漏了什么,还是这是Java上的一个bug?上面的代码确实适用于单个实体,但不适用于集合,REST服务工作正常,问题在于拦截器

我得到的例外是:

StandardWrapperValve[com.app.myApp.service.ApplicationConfig]: Servlet.service() for servlet com.app.myApp.service.ApplicationConfig threw exception
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class java.util.Vector, genericType=class java.util.Vector.
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:191)
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
        at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103)
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
        at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88)
        at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:139)
编辑:

好的,我成功地使它工作了,但需要添加另一个依赖项,但仍然让我恼火的是,一组get抛出了一个异常,ContainerResponseContect的setEntity()只对单个实体有效,但不管怎样

responseContext.setEntity((new Gson()).toJson(collection));

这就成功了。

试试
text/json
maybeIt说你不能将
Vector
实例转换成json,因为你没有这种类型的转换器。如果没有任何java知识,我无法进一步帮助。。。我发现了更多的stackoverflow链接,因此我认为这是一个重复的链接,没有提供程序它就可以工作,如果来自服务的响应是一个向量(JAX-RS实现不是我的),为什么我不能设置相同的向量(工作!)。这根本没有任何意义。无论提供者是谁,它都能工作。不,它不是重复的,因为我试图做的不是直接将Vector转换为JSON只要看看代码,那代码怎么可能不起作用,如果我对它起作用的集合进行注释的话,我会在中间不做任何事情的情况下设置我得到的。这一定是依赖关系或什么的