找不到媒体类型= application / json的MessageBodyReader - android

时间:2015-05-17 19:24:25

标签: java android jersey jersey-2.0 jersey-client

我使用Jersey 2.17& android使用泽西制作的web api。

我收到错误

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=class [Lcom.entities.Goal;, genericType=class [Lcom.entities.Goal;

我在

收到错误
 public static Goal[] getGoals(String path){
        WebTarget webResource = getClient().target(ROOT + path);
        Invocation.Builder builder = webResource.request(MediaType.APPLICATION_JSON_TYPE);
        return builder.get(Goal[].class); // this line gives error
    }

我用

导入了库
 compile 'org.glassfish.jersey.core:jersey-client:2.17'

我已尝试添加一些json库,但其中大多数会给我构建错误,例如多个dex等。

如果我选择String.class它将起作用,我将得到一个有效的String。 并且Goal类有一个空的构造函数。

2 个答案:

答案 0 :(得分:1)

今天遇到同样的问题。 您应该在类路径中添加以下依赖项:

    <dependency>
       <groupId>org.glassfish.jersey.media</groupId>
       <artifactId>jersey-media-json-jackson</artifactId>
       <version>2.23.1</version>
    </dependency>

问题是Jersey客户端需要一个messageprovider来将响应json转换为Java对象。我们已经添加了json-jackson提供商。

答案 1 :(得分:0)

Erhannis评论是正确的,并为我工作。

创建{ "current_page": 1, "per_page": 100, "total_entries": 112, "items": [ { "id": 1, "name": "vehicleA", "state": "available", "charge": 100 }, { "id": 2, "name": "vehicleB", "state": "available", "charge": 75 }, { "id": 3, "name": "vehicleB", "state": "available", "charge": 50 }... 时,您必须在JacksonJsonProvider注册ClientConfig

Client