【问题标题】:MessageBodyProviderNotFoundException on JSON webservice using GenericType使用 GenericType 的 JSON Web 服务上的 MessageBodyProviderNotFoundException
【发布时间】:2018-02-12 16:29:49
【问题描述】:

我在我的 Web 服务客户端上读取 GenericType 时遇到问题。

这是我的网络服务:

    @GET
@Path("/results")
@Produces(MediaType.APPLICATION_JSON)
public Response getPlayerResults(@QueryParam("nick") String nick, @Context HttpServletRequest request,
        @Context HttpServletResponse response) {

    // if (!isAuth(request, response)) {
    // authError(response);
    // }

    System.out.println(nick);
    GenericEntity<List<JSONTournament>> entity = new GenericEntity<List<JSONTournament>>(
            MongoTournaments.getPlayerResults(nick, null)) {
    };

    return Response.ok(entity).build();
}

我的客户:

Client client = ClientBuilder.newClient();

        WebTarget webTarget = client.target("http://localhost:8080/WS").path("players/results");

        Response response = webTarget.queryParam("nick", nick).request(MediaType.APPLICATION_JSON).get();

        System.out.println(nick);   

        tournaments = response.readEntity(new GenericType<List<JSONTournament>>() {
        });

我得到了这个异常和一个奇怪的媒体类型 (text/html) 而不是 application/json...:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=text/html;charset=utf-8, type=interface java.util.List, genericType=java.util.List<com.winascrap.database.model.JSONTournament>.
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:232)
at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:156)
at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:853)
at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:812)
at org.glassfish.jersey.client.ClientResponse.readEntity(ClientResponse.java:368)
at org.glassfish.jersey.client.InboundJaxrsResponse$2.call(InboundJaxrsResponse.java:122)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:419)
at org.glassfish.jersey.client.InboundJaxrsResponse.readEntity(InboundJaxrsResponse.java:119)

我不明白缺少什么或没有正确完成。 我的对象有 @XmlRootElement 注释,我使用 jersey.core、jersey.media 和 moxy 作为依赖项......(但也许我忘记了依赖项或配置?):

感谢您的帮助!

【问题讨论】:

    标签: java json rest web-services


    【解决方案1】:

    解决了!

    我错过了向带有 @XmlRootElement 注释的自定义类型添加空构造函数。它只添加一个没有参数的构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多