2014-01-10 61 views
5

我决定搬到Jersey 2.5,我在Java Beans转换为JSON时遇到了一些问题。我有一个User Bean,并且我试图返回一个服务列表users从Jersey 1. *升级到Jersey 2.5

其获取用户的列表我的服务代码:

@GET 
@Path("getAllUsers") 
@Produces(MediaType.APPLICATION_JSON) 
public List<User> getAllUsers() { 
    //Fetching users list here 
    return users; 
} 

我获得以下服务器控制台的例外:

[org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.example.User>.] with root cause 
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.example.User>. 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:227) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149) 
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149) 
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149) 
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1139) 
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:574) 
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:381) 
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:371) 
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:262) 

我缺少的任何相关性或任何特定的2.5配置?

+0

没有。你使用哪个JSON提供者?你在GF4上运行还是在使用其他容器? –

+0

@MichalGajdos Jackson和Tomcat。 –

+0

谢谢,请说清楚。您依赖于'jersey-media-json-jackson'或直接在Jackson 2.x上,而不是其他JSON提供者(即'jersey-media-moxy')。我对吗? –

回答

5

由于您使用的杰克逊1.9.x的一个(不)马歇尔JSON,请确保您有jersey-media-json-jackson模块中你所依赖的列表和你登记在你的应用JacksonFeature,即:

public class MyResourceConfig extends ResourceConfig { 

    public MyResourceConfig() { 
     // ... other registrations ... 

     register(JacksonFeature.class); 
    } 
} 

要查看更多如何在泽西岛2注册供应商的方法,请参阅此article

+0

非常感谢。它工作完美。 –