2016-01-06 2 views
1

Я разрабатывал спокойный веб-клиент и пытался получить полезную нагрузку JSON из ответа метода GET. Я использую Джерси. Но я просто не могу прочитать данные JSON, используя метод response.getEntity(). Я пробовал много методов, включая response.bufferEntity(), но вывод всегда оставался пустым. Ниже мой код и вывод, и, кроме того, я могу видеть данные JSON прямо в ответном пакете, захваченном в wirehark. Я бы очень признателен всем, кто пытается помочь выяснить, почему или предоставить решение. Спасибо!Не могу получить данные JSON от ответа Джерси GET

Код:

public JSONObject Get(String requestPath){ 

    ClientResponse response = webResource.path(requestPath) 
      .header("Content-Type", contTypeHeader) 
      .header("Accept",acceptHeader) 
      .header("Authorization", authZ) 
      .get(ClientResponse.class); 

    response.bufferEntity(); 
    if (!(response.getStatus() == 201 || response.getStatus() == 200)) { 
     throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); 
    } 

    System.out.println(response.getEntity(JSONObject.class)); 
    return null; 

} 

и выход всегда так: {}

ответ

0

Вы не можете использовать JSONObject, если у вас нет MessageBodyReader для него. См. Больше на JAX-RS Entity Providers. Поставщик, который вы используете (возможно, Джексон), поддерживает только JavaBean POJO или их коллекции. Например, если у вас есть этот JSON

{ "property1" : "value1", "property2": "value2" } 

Тогда вы должны иметь POJO как

public class Bean { 
    private String property1; 
    private String property2; 
    // getters and setters 
} 

Затем вы можете сделать getEntity(Bean.class). Причина, по которой вы получаете пустой объект, заключается в том, что десериализация работает с сеттерами. Он ищет свойства на JSON, который соответствует сеттерам, и использует это свойство. Объект JSON имеет нет сеттеров для ваших объектов JSON.

+0

Благодарим вас за ответ. Что делать, если JSON является немного более сложным, как это: { "ВТН": [ { "Описание": "ВТН Хао", "имя" : "Tenant_Hao", "hardTimeout": "0", "idleTimeout": "300" }, { "описание": "ВТН Цзюэ", "название" : "Tenant_Jue", "hardTimeout": "0", "idleTimeout": "300" } ] }, а количество записей не определено. как я могу определить POJO? –

+0

Вам нужно будет сделать некоторые уроки Джексона. Начните [здесь] (http://www.tutorialspoint.com/jackson/jackson_data_binding_generics.htm) и [здесь] (http://wiki.fasterxml.com/JacksonInFiveMinutes). –

+0

В основном с тем, что вы предоставили, просто используйте pojo с атрибутом 'vtn', который имеет тип' List '. 'SomeObject' должен иметь свойства' description', 'name' и т. Д. –