2013-07-17 2 views
2

Я использовал Jersey 1.16, чтобы потреблять JSON, но теперь я с трудом потребляю JSON с использованием Джерси 2.0 (который реализует JAX-RS 2.0).Прочтите JSON with Jersey 2.0 (JAX-RS 2.0)

У меня есть ответ JSON как это:

{ 
    "id": 105430, 
    "version": 0, 
    "cpf": "55443946447", 
    "email": "[email protected]", 
    "name": "Maria", 
} 

и метод, который потребляет его:

public static JSONObject get() { 
    String url = "http://127.0.0.1:8080/core/api/person"; 
    URI uri = URI.create(url); 

    final Client client = ClientBuilder.newClient(); 
    WebTarget webTarget = client.target(uri);    

    Response response = webTarget.request(MediaType.APPLICATION_JSON).get(); 

    if (response.getStatus() == 200) {  
     return response.readEntity(JSONObject.class); 
    } 
} 

Я также попытался:

return webTarget.request(MediaType.APPLICATION_JSON).get(JSONObject.class); 

Но JSONObject возвращение null. Я не понимаю свою ошибку, потому что ответ в порядке!

+0

Можете ли вы рассказать подробнее о том, что такое '' JSONObject'? Что, если вы измените тип возврата на 'String'? Потому что, используя 'String', вы должны получить полезную нагрузку. Если нет, вы должны проверить свой URL. Если URL-адрес правильный, значит, у вас проблема с сервером. Теперь, если полезная нагрузка - ожидаемый JSON, тогда ваша проблема не имеет «MessageBodyReader», который поддерживает ваш 'JSONObject'. –

+0

JSONObject - это класс [Jettison API] (http://jettison.codehaus.org/). Это набор пар ключ/значение [Docs] (http://jettison.codehaus.org/apidocs/org/codehaus/jettison/json/JSONObject.html). Используя JSONObject, я могу получить значение с помощью метода get(). –

+0

URL-адрес правильный, потому что статус в порядке (200 - запрос выполнен успешно). –

ответ

5

Я нашел решение. Возможно, это не самое лучшее, но это работает.

public static JsonObject get() { 
    String url = "http://127.0.0.1:8080/core/api/person"; 
    URI uri = URI.create(url); 

    final Client client = ClientBuilder.newClient(); 
    WebTarget webTarget = client.target(uri); 

    Response response = webTarget.request(MediaType.APPLICATION_JSON).get(); 

    //Se Response.Status.OK; 
    if (response.getStatus() == 200) { 
    StringReader stringReader = new StringReader(webTarget.request(MediaType.APPLICATION_JSON).get(String.class)); 
    try (JsonReader jsonReader = Json.createReader(stringReader)) { 
     return jsonReader.readObject(); 
    } 
    } 

    return null; 

}

я переключился класс JSONObject (пакет импорта org.codehaus.jettison) путем JSONObject (пакет javax.json) и я использовал методы, чтобы манипулировать содержанием в виде строки.

S.

+1

После того, как вы получите строку, вы также можете использовать 'new JsonObject (string)'. –

+0

Но JsonObject - это интерфейс. Чтобы использовать его, мне нужно реализовать все методы. –

+0

Что? Нет, вы сказали, что это из [Jettison] (http://jettison.codehaus.org/apidocs/org/codehaus/jettison/json/JSONObject.html), конкретного класса. Если документация не является неправильной, то ваш интерфейс не является классом Jettison. –

Смежные вопросы