2013-03-31 3 views
4

Je souhaite lire le résultat d'une méthode GET de services REST à l'aide d'une application cliente que je compile à l'aide de HttpUrlConnection. Cette méthode renvoie des informations sur un utilisateur. Après l'avoir lu, je veux créer un objet du Type d'utilisateur, avec toutes les informations de cet utilisateur rempli. Je pense que je dois d'abord le convertir en JSON, non? J'utilise GSON.Création d'un objet à partir de JSON (GSON: java.lang.IllegalStateException: BEGIN_OBJECT attendu mais STRING)

Ce que j'est:

if(urlConnection.getResponseCode()==200) 
{ 
    String response =""; 
    Scanner inStream = new Scanner(urlConnection.getInputStream()); 

    while(inStream.hasNextLine()) 
     response+=(inStream.nextLine()); 
    System.out.println(response); 

    //JSON 
    Gson gson = new Gson(); 
    String json = gson.toJson(response); 
    System.out.println(json); 

    // User Object 
    User object = new User(); 
    object = gson.fromJson(json, User.class); 
    System.out.println(object); 

}

Quand je fais la première impression, je reçois:

{"userID":"user2","isMale":false,"isObject":false,"telephone":"+911111111","email":"[email protected]","birthdate":"2012-08-01","firstName":"Maria","lastName":"Silva","isocountrycode":"PT"} 

Quand je fais la deuxième impression, je reçois:

"{\"userID\":\"user2\",\"isMale\":false,\"isObject\":false,\"telephone\":\"+911111111\",\"email\":\"[email protected]\",\"birthdate\":\"2012-08-01\",\"firstName\":\"Maria\",\"lastName\":\"Silva\",\"isocountrycode\":\"PT\"}" 

Mais quand j'essaie de pr Dans l'objet utilisateur, je reçois cette erreur:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 226 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176) 
    at com.google.gson.Gson.fromJson(Gson.java:795) 
    at com.google.gson.Gson.fromJson(Gson.java:761) 
    at com.google.gson.Gson.fromJson(Gson.java:710) 
    at com.google.gson.Gson.fromJson(Gson.java:682) 
    at httpURLconnection.UserGetUserInfo.main(UserGetUserInfo.java:70) 
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 226 
    at com.google.gson.stream.JsonReader.expect(JsonReader.java:339) 
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165) 
    ... 5 more 

Pouvez-vous me dire ce que je fais mal? Tous les champs d'objet Utilisateur ont été remplis à l'aide de cette classe User.

classe User:

public class User { 
    String userID  = null; 
    boolean isMale  = false; 
    boolean isObject  = false; 
    String Telephone  = null; 
    String Email   = null; 
    Date Birthdate  = null; 
    String FirstName  = null; 
    String LastName  = null; 
    String ISOcountrycode = null; 

    (...) 
    } 
+1

Le même problème que je reçois en ce moment? Comment avez-vous résolu votre problème? – nida

Répondre

1

Dans votre classe utilisateur, vous devez déclarer tous les types de données, ni plus ni moins que le JSONObject contient. F.e .: class User { String UserID = ""; Boolean isMale;}

et ainsi de suite.

Sinon, le GSON.toJson(); ne fonctionnera pas et jette l'exception.

+0

Droite .. J'ai ceci dans ma classe User: 'public class UserT { String userID = null; Chaîne Prénom = null; String LastName = null; Chaîne ISOcountrycode = null; Chaîne téléphonique = null; boolean isMale = false; Chaîne Email = null; Date de naissance = null; boolean isObject = false; ' – user2144555

+0

Est-ce parce que la commande n'est pas la même? Mais j'ai maintenant essayé avec le même ordre et l'erreur est la même. – user2144555

+0

Peut-être que c'est le nom de la classe. UserT est votre classe dans les commentaires mais vous utilisez User.class dans votre question. Peut-être que c'est un problème d'ordre aussi mais je n'ai jamais reconnu cela. –

Questions connexes