2016-09-08 9 views
0

私はiOSアプリケーションで作業しているJava開発者です。このアプリケーションは、サーバー上のJava Springバックエンドに要求を送信します。JavaオブジェクトからIOS NSDictionary、プロパティ注文

コールが行われると、バックエンドはJSONをフロントエンドに返して、逆シリアル化されてNsDictionaryになり、正常に動作します。

しかし、クライアントはフロントエンドのフィールドを自分が私たちに与えた順序でソートするように依頼しました。

私はそうのようなオブジェクトに注釈を付けることを試みた:

@JsonPropertyOrder({"firstName","lastName","mobile","email", "address","city","state","gender"}) 
public final class User{ ... } 

しかし、それは文字列表現でプロパティをソートしながら、それはNsDictionaryにデシリアライズされたとき、それは代わりにそのフィールドによってアルファベット順に並べています。

この並べ替えを行うことはできますか?どのように実装できますか?

よろしくお願い申し上げます。

答えて

0

NSDictionaryはキーの特定の順序をサポートしていません。アルファベット順は文字列表現を表しています。内部的には順序がありません。

あなたは

{"firstName":{sortIndex:0,value:"John"}} 

あるいは簡単に同じように、あなたは

[{"firstName":"John"},{"lastName":"Doe"}] 
0
のように、配列のエントリとして各キーと値のペアを置くことができ、sortIndexプロパティを含めるように、データモデルを変更しようとすることができます

おかげでアンドレイは

私はあなたの第二の溶液を取り、これは私がやっていることで、何が私の作品:

1)クラス内のフィールドにクライアントが望むように指示しました。

2)Iは、クラスに次のメソッドを追加しました:

@JsonProperty(access = Access.READ_ONLY) 
List<HashMap<String,String>> keyValues = new ArrayList<HashMap<String,String>>(); 
public List<HashMap<String, String>> getKeyValues() { 
    return keyValues; 
} 
public void initKeyValuePairs(){ 
    Field[] fields = this.getClass().getDeclaredFields(); 
    for(int i=0 ; i<19 ; i++){ 
     try { 
      HashMap<String,String> pom = null; 
      if(fields[i].get(this)!=null){ 
       pom = new HashMap<String,String>(); 
       pom.put(fields[i].getName(), fields[i].get(this).toString()); 
       keyValues.add(pom); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

したがって私は完全ユーザーモデルを移入するとき、今、私は、このメソッドを呼び出し、JSONは正しくソートされた、オブジェクトの配列を返します。

(PS:私のクラスでは19個の以上のフィールドがありますが、クライアントは彼が述べたように、第1の19があることを尋ねたので、私はちょうど最初の19を取り、残りを無視する:))

助けてくれてありがとう。

関連する問題