2013-02-12 47 views
2

我正在使用spring的android框架通過Http GET檢索json數據。我收到了同樣的以下異常:使用Spring Android Framework檢索JSON數據通過HTTP GET

- 無法讀取JSON:無法反序列化com.springandroidjsondemo.beans.LoginBean []的情況下進行START_OBJECT令牌

的bean(LoginBean)是繼

package com.springandroidjsondemo.beans; 

public class LoginBean { 



    private String status; 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 
} 

Android的代碼如下:

HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.setAccept(Collections.singletonList(new MediaType("application", "json"))); 

HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders); 
// Create a new RestTemplate instance 
RestTemplate restTemplate = new RestTemplate(); 
// Add the Jackson message converters 
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

// Make the HTTP GET request, marshaling the response from JSON to an array of Events 
ResponseEntity<LoginBean[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity,LoginBean[].class); // getting exception here 

LoginBean[] loginBean = responseEntity.getBody(); 
String status = loginBean[0].getStatus(); 

來自服務器的JSON響應如下:

{"emp-data":[{"status":"true"}]} 

我不知道是否需要爲傑克遜編組站任何註釋

請建議的解決方案

謝謝!

+0

您可以在android中使用正常的JSON解析。 http://sayemsiam.wordpress.com/2013/01/31/communication-between-php-and-android/#more-8 – 2013-02-12 13:21:16

+0

感謝您的回覆!!是的,可以使用,我已經完成..但我想用spring android框架來實現這個。我遵循了springsource.com上給出的步驟,但我無法實現... – 2013-02-13 05:14:30

回答

0

這是一個傑克遜反序列化問題。如果您將JSON響應與LoginBean進行比較,則狀態數組將包含在元素「emp-data」中。但是,您的RestTemplate請求需要JSON,如下所示。

[{"status":"true"},{"status":"false"}] 

你有幾個選項。你可以在LoginBean周圍創建一個包裝對象。或者你可以嘗試註解LoginBean類似如下:

@JsonRootName(value = "emp-data") 
public class LoginBean { 

    ... 
} 

爲了這個工作,你可能需要配置傑克遜ObjactMapper。

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 
MappingJackson2HttpMessageConverter jackson = new MappingJackson2HttpMessageConverter(); 
jackson.setObjectMapper(objectMapper); 
RestTemplate restTemplate = new RestTemplate(); 
restTemplate.getMessageConverters().add(jackson);