2

HttpGETを介してjsonデータを取得するためにSpringandroidフレームワークを使用しています。私は同じために次の例外を取得しています:

-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;
    }
}

アンドロイドコードは次のとおりです:

  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"}]}

ジャクソンマーシャリングに注釈が必要かどうかわかりません

解決策を提案してください

ありがとう!

4

1 に答える 1

0

これは Jackson のデシリアライゼーションの問題です。JSON 応答を LoginBean と比較すると、ステータスの配列は要素「emp-data」に含まれています。ただし、RestTemplate リクエストは次のような JSON を想定しています。

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

いくつかのオプションがあります。LoginBean のラッパー オブジェクトを作成できます。または、次のように LoginBean にアノテーションを付けてみることもできます。

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

    ...
}

これを機能させるには、おそらく Jackson 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);    
于 2013-03-07T21:03:53.557 に答える