使用json-array的jersey客户端将无法正常工作

时间:2014-04-03 09:34:51

标签: java tomcat jersey

我知道那里有一些答案,但没有一个能真正解决我的问题。我很高兴能得到所有的投入。 Thx提前。

我尝试使用的服务是一件运动衫,我试图'GET'。该服务使用'@Produces(MediaType.APPLICATION_JSON)'注释并返回以下内容:

[{"projRnd":"1","firstname":"Jadeveon","lastname":"Clowney"},{"projRnd":"1","firstname":"Greg","lastname":"Robinson"}, ..]

现在,我的服务消费者会执行以下操作:

import org.json.simple.JSONArray;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
...
WebResource webResource = client.resource(URL to my ws);
JSONArray jsonObjects = webResource.accept(MediaType.APPLICATION_JSON_TYPE).get(JSONArray.class);

Tomcat说:

HTTP Status 500
javax.servlet.ServletException: com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class org.json.simple.JSONArray, and Java type class org.json.simple.JSONArray, and MIME media type application/json was not found
...

澄清......客户端在前端的vaadin应用程序上运行...... HTTP 500不是来自后端。

我的pom.xml肯定有正确的依赖:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.8</version>
</dependency>

就像我说的那样......所有输入都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

..所以我解决了问题...首先你不应该做的事情:

JSONArray jsonObjects = webResource.accept(MediaType.APPLICATION_JSON_TYPE).get(JSONArray.class);

我更改了服务,因此响应如下:

{"prospectList":[{"projRnd":"1","firstname":"Jadeveon","lastname":"Clowney"},{"projRnd":"1","firstname":"Greg","lastname":"Robinson"}, ..]}

从这里获取JSONArray的方法很简单,使用JSONParser,我甚至没有尝试使用它(失败!)。

ClientResponse response = webResource.accept("application/json")
        .type("application/json").get(ClientResponse.class);
String s = response.getEntity(String.class);
JSONParser parser = new JSONParser();
Object obj = parser.parse(s);
JSONObject jsonObject = (JSONObject) obj;
JSONArray jsonArray = (JSONArray) jsonObject.get("prospectList");

返回的jsonArray是可迭代的,现在可以访问每个元素的属性:

(String) jsonObj.get("firstname");