2017-01-26 5 views
1

私はJavaで書かれたカスタムレストコントロールを持っています。文字列フィールドはすべて正常に動作しますが、複数値の文字列フィールドは正常に動作しません。私のコードは、Javaカスタムrestコントロールの多値フィールドからJSONを取得

"[値1、値2、値3 ...]"を返します。値の周りにコンマはありません。 Webページでの出力は次のようになります。私は、値の周りにカンマを得ることができる場合

enter image description here

、フロントエンドのフレームワークは簡単にそれを解析することができます。

フィールドから値を解析して正しくフォーマットすることを試みましたが、正しく取得できないようです。

最初のコードセットは文字列に対して機能します。 2つ目は、多価値分野のために働く試みです。

ご協力いただければ幸いです。

writer.startProperty("chgTitle"); 
     writer.outStringLiteral(String.valueOf(columnValues.get(0))); 
writer.endProperty(); 

writer.startProperty("plpAffected");  
       Object tmpObj = columnValues.get(5); 
       if (tmpObj instanceof Vector) { 
         String[] copyArr = new String[((Vector) tmpObj).size()]; 
         ((Vector) tmpObj).copyInto(copyArr); 
         writer.outStringLiteral(String.valueOf(copyArr)); 
       } else { 
       } 
writer.endProperty(); 

答えて

2

少し異なるアプローチをお勧めします。私はJSON構造体に複数の値の状況が可能な場所で配列を使用させるようにしたい。 Philippe Riand's specialized JSON writerを使用しているようにも見えるので、私はそれを仮定します。ここで

は、私はそれを攻撃する方法についてです:

writer.startProperty("chgTitle"); 
     writer.outStringLiteral(String.valueOf(columnValues.get(0))); 
writer.endProperty(); 

writer.startProperty("plpAffected");  
    Vector<?> tmpVec = Util.getValueAsVector(columnValues.get(5)); 
    writer.startArray(); 
    for (Object ob : tmpVec) { 
     writer.startArrayItem(); 
      // assuming String contents 
      writer.outStringLiteral(String.valueOf(ob)); 
     writer.endArrayItem(); 
    } 
    writer.endArray(); 
writer.endProperty(); 

返すcolumnValuesをラップするために、私はmy SSJS getValueAsVector helper functiona Java equivalentを使用しています。それは私がほとんど排他的に使用するVectorまたはArrayListをチェックします。そうでなければ、それは新しいVectorにそれを押し進めます。その方法は次のとおりです。

public static Vector<?> getValueAsVector(Object obj) { 
    if(obj instanceof java.util.Vector){ 
    return (Vector<?>) obj; 
    }else if(obj instanceof ArrayList) { 
    List<?> o = (List<?>) obj; 
    Vector<Object> tmpVec = new Vector<Object>(); 
    for(int i=0;i<o.size();i++){ 
     tmpVec.add(o.get(i)); 
    } 
    return tmpVec; 
    }else { 
    Vector<Object> tmpVec = new Vector<Object>(); 
    tmpVec.add(obj); 
    return tmpVec; 
    } 
} 
+1

これは完全に機能しました。 –

+2

1つの小さな変更: "(String)obj"の代わりに "String.valueOf(obj)"を使用してください - すべてのデータ型に対して機能し、objがnullの場合には吹き飛ばされません。 – stwissel

関連する問題