2013-02-12 38 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);  
相关问题