2016-09-29 10 views
0

レトロフィットコール:異なるJSON構造を扱うためにどのようなテクニックを使用しますか?

@GET("getUser") 
    Call<Map<Object,Object>> getUser(@Query("phoneNumber") String phoneNumber, @Query("hash") String hash) 

リターンUserオブジェクトならば、私は、ブラウザからのJSON resutが必要になります。

{"error":"-1"} 

コールバック応答:ブラウザから

{"error":"0","value":[{"id":1,"name":"","phoneNumber":"87472335578","smsCode":497797,"smsCodeDate":1475160867,"hash":"76dcc911e14f997189243f3370080e62","roles":[{"id":2,"name":"ROLE_USER"}]}]} 

とJSONのresutリターンエラーならば、 android

enter image description here

Map<Object,Object>を使用して、異なるJSON構造を処理しました。しかし問題は数字のキャストにあります。私はintまたはlongが必要ですが、javaはdouble値として見ています。私はいくつかの解析メソッドを使用することができます。しかし、Mapに多くの変数がある場合、それは恐ろしい作業になります。

私はMap<String,String>を使用することはできませんし、Gsonはそれを処理したくないので、解析することはできません。バックスラッシュがあります。もちろん、それを削除することは明らかですが、私はJSONを扱うためのエレガントな方法を探したいと思います。

{"error":"0","value":[{\"id\":\"1\",\"name\":\"\",\"phoneNumber\":\"87472335578\",\"smsCode\":497797,\"smsCodeDate\":1475160867,\"hash\":\"76dcc911e14f997189243f3370080e62\",\"roles\":[{\"id":2,\"name\":\"ROLE_USER\"}]}]} 

original post

+0

チェックこのチュートリアルhttp://wiki.workassis.com/android-retrofit-2-1-http-client/ –

答えて

1

フォローhttp://wiki.workassis.com/android-retrofit-2-1-http-client/このチュートリアルをして

モデルクラスとして次のようにします。上記の方法

サーバー

public final static String SUCCESS = "0"; 
public final static String NOT_FOUND = "-1"; 

Map<Object, Object> m = new HashMap<>(); 

@RequestMapping("/getUser") 
    Map<Object, Object> getUser(@RequestParam(value = "phoneNumber", defaultValue = "") String phoneNumber, 
      @RequestParam(value = "hash", defaultValue = "") String hash) { 

     m.clear(); 

     User user = userRepository.findByPhoneNumberAndHash(phoneNumber, hash); 
     if (user != null) { 
      m.put(ERROR_JSON, SUCCESS); 
      m.put(VALUE_JSON, String.valueOf(user)); 
     } else { 
      m.put(ERROR_JSON, NOT_FOUND); 
     } 
     return m; 
    } 

でJSONジェネレータのコードは、このJSONを返します

class Result{ 
    String error; 
    List<Value> value; 
} 

class Value{ 
    int id; 
    String name; 
    String phoneNumber; 
    String smsCode; 
    Long smsCodeDate; 
    String hash; 
    List<Roles> roles; 

} 

class Roles{ 
    int id; 
    String name; 
} 

@GET("getUser") 
Call<Result>getUser(@Query("phoneNumber") String phoneNumber, @Query("hash") String hash) 
+0

を使用し、私はクライアント側でこれを作ったが、この方法から左。私は代わりにリストをタイプしなかった。この答えで私はサーバー側にこれと同じ方法を使用する考えを得ました。それはとても明白です))しかし、考えは今になって来ました。 Mr @Bikesh M Annurありがとうございました –

関連する問題