2015-03-06 14 views
5

के साथ जावा क्लासेस में नेस्टेड JSON ऑब्जेक्ट्स मुझे पता है कि यह आसान हो सकता है। हालांकि, मैं इसे काम करने के लिए नहीं मिल सकता है।नक्शा नेस्टेड JSON ऑब्जेक्ट्स स्प्रिंग रेस्ट टेम्पलेट

तो मैं अपने JSON डेटा को मैप करने के लिए स्प्रिंग रेस्ट टेम्पलेट का उपयोग करने की कोशिश कर रहा हूं। मेरे पास बाकी कॉल से JSON प्रतिक्रिया का पालन किया गया है।

{ 
    "message":"ok", 
    "status":"ok", 
    "data":[ 
     {"Name":"Yo", 
     "Address":"100 Test Rd"}, 
     {...}, 
     {...} 
    ] 
} 

और यहां वह कक्षा है जिसे मैं इसे मानचित्र बनाने की कोशिश कर रहा हूं।

public Reponse getResponse() { 
    ResponseEntity<Reponse> responseEntity = restTemplate.getForEntity(Url, Reponse.class); 

    return responseEntity.getBody(); 
} 

अब यहाँ समस्या आता है:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Data implements Serializable { 

    private String Name; 
    private String Address; 
} 

यहाँ कोड मैं RestTemplate कॉल करने के लिए प्रयोग किया जाता है:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Response implements Serializable { 

    private String message; 
    private String status; 
    private List<Data> data; 

    // I could also use a array instead 
    // private Data[] data; 
} 

यहाँ मेरी डाटा वर्ग है। मैं "संदेश" और "स्थिति" प्राप्त करने में सक्षम था, लेकिन जब मैं डेटा लॉग/प्रिंट करने का प्रयास करता हूं, तो यह शून्य दिखाता है। बिल्कुल यकीन नहीं है कि यहां क्या हो रहा है। मैं वास्तव में कुछ मदद का उपयोग कर सकता था। धन्यवाद।

+2

मुझे एक ही समस्या है जिसके लिए आपको कोई समाधान मिला? – user2137817

+0

DID आपको कोई समाधान मिल गया है? धन्यवाद। – Fco

उत्तर

0

कृपया private List<Data> data = new AllarList<Data>() का उपयोग करें; और कृपया कक्षाओं में गेटर्स() और सेटर्स() विधियों को प्रदान करें।

डाटा वर्ग

ऊपर रखो @JsonInclude(Include.NON_EMPTY) कृपया अपने मुख्य pom.xml फ़ाइल में खंड के अंतर्गत निर्भरता नीचे जोड़ सकते हैं और Maven संकलन है। तो मुझे लगता है कि आपकी समस्या हल हो जाएगी।

 <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.2.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.2.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.datatype</groupId> 
      <artifactId>jackson-datatype-joda</artifactId> 
      <version>2.1.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl</artifactId> 
      <version>1.8.8</version> 
     </dependency> 
+0

मैस से बचने के लिए मैंने यहां सेटर्स और गेटर्स नहीं लगाए। "डेटा" शुरू करने का प्रयास किया। अभी भी शून्य वापस आती है। "Include.NON_EMPTY" पर भी त्रुटि संकलित करें, "एक चर के लिए हल नहीं किया जा सकता"? धन्यवाद। – Ren

+0

कृपया इसे आयात करें: com.fasterxml.jackson.annotation.JsonInclude आयात करें; – sayan

0

आप केवल प्रिंट डेटा की जरूरत है, तो आप इस

RestTemplate restTemplate = new RestTemplate(); 
ResponseEntity<String> response = restTemplate.getForEntity(
    "your url", 
    String.class); 

System.out.println(response); 
2

मैं RestTemplate भी मेरी कक्षा मॉडल के लिए नेस्टेड JSON ऑब्जेक्ट मानचित्रण नहीं के साथ एक समान मुद्दा हो रही थी, बहुत निराशा के बाद मैं करने का निर्णय लिया क्या कर सकते हैं RestTemplate का उपयोग करके मेरे JSON को स्ट्रिंग के रूप में पुनर्प्राप्त करें (सीधे मेरे लक्षित ऑब्जेक्ट में कनवर्ट करने के बजाय) और फिर मेरी स्ट्रिंग को मेरी लक्षित इकाई में बदलने के लिए Google Gson लाइब्रेरी का उपयोग करें।

pom.xml

<dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.2.4</version> 
    </dependency> 

कोड RestTemplate कॉल करने के लिए:

ResponseEntity<String> responseEntity = restTemplate.getForEntity(Url,String.class); 
Gson gson = new GsonBuilder().create(); 
Response reponse = gson.fromJson(responseEntity , Response.class); 

दुर्भाग्य से मैं यह पता लगाने में असमर्थ क्यों मेरे नेस्टेड वस्तुओं RestTemplate पहली जगह का उपयोग कर मैप नहीं किया गया था, लेकिन मैं इस समाधान आशा मदद करता है!

1

बाकी टेम्पलेट का उपयोग कर आरईएसटी एपीआई से जेसन डेटा पढ़ने पर मुझे एक ही समस्या थी। हल करने के लिए getters और setters घोषित सूची के लिए:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Response implements Serializable { 

    private String message; 
    private String status; 
    private List<Data> data; 

// getters and Setters for the list. 


} 

RestTemplate आंतरिक रूप से इसी सरणी listarray से मान मैप होगा।

0

एन्नोटेट संपत्ति @JsonUnwrapped साथ के रूप में

नीचे
@JsonIgnoreProperties(ignoreUnknown = true) 
public class Response implements Serializable { 
    private String message; 
    private String status; 
    @JsonUnwrapped 
    private List<Data> data; 
} 
0

मैं एक ही मुद्दा में भाग "डाटा"।@JsonProperty साथ टिप्पणी करें:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Data implements Serializable { 

    @JsonProperty("Name") 
    private String name; 

    @JsonProperty("Address") 
    private String address; 

    // getters/setters for name and address 

} 

अपने Data वर्ग के क्षेत्र अब आबादी वाले किया जाना चाहिए, और आप JSON प्रतिनिधित्व (Name की जैसे name बजाय) के स्वतंत्र अपने खेतों नाम कर सकते हैं।

संबंधित मुद्दे