从Jersey 1. *升级到Jersey 2.5

时间:2014-01-10 08:46:34

标签: java json rest jersey-2.0

我决定转移到Jersey 2.5,我在Java Beans转换为JSON时遇到了某些问题。我有一个User Bean,我试图从一个服务返回users列表。

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

@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特定配置?

1 个答案:

答案 0 :(得分:5)

由于您使用Jackson 1.9.x来(联合国)编组JSON,请确保您的依赖项列表中包含jersey-media-json-jackson模块,并且您在应用程序中注册JacksonFeature,即:

public class MyResourceConfig extends ResourceConfig {

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

        register(JacksonFeature.class);
    }
}

要了解如何在Jersey 2中注册提供商的更多方法,请参阅此article

相关问题