Play Framework 1.2.4はgson
ライブラリに直接依存していますので、JSON文字列のレンダリングに使用できます。 gsonの@Expose
注釈を使用するだけです。だからあなたの例では、あなたがこのようなあなたのJSON文字列にするフィールドをマークします:
public class ComplexClass {
@Expose
public Long id;
@Expose
public String name;
...
}
次に、あなたのコントローラでは、あなただけにこれを行うだろう:
public static void someActionMethod() {
// get an instance of your ComplexClass here
ComplexClass complex = ...
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()
String json = gson.toJson(complex);
renderJson(json);
}
は、ドキュメントhereを参照してください。
ComplexClassが実際にplay.db.jpa.Model
であるためid
フィールドは、親クラスに抽象化され、あなたがそれに@Expose
注釈を入れることができない場合は、でアノテートされていないフィールドをスキップし、独自のExclusionStrategyを作成することができます@Expose
であり、id
とは呼ばれません。したがって、このような何か(擬似コード):
public final class ComplexClassExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipField(FieldAttributes attributes) {
if (name of field is "id") return false;
if (field is annotated with @Expose) return false;
return true;
}
そして、コントローラは、このように見えるように、わずかに変更されます:
GsonBuilder builder = new GsonBuilder();
ComplexClassExclusionStrategy strategy = new ComplexClassExclusionStrategy();
builder.setExclusionStrategies(strategy);
Gson gson = builder.create();
String json = gson.toJson(complex);
renderJson(json);
は、あなたの優雅な答えをありがとうございました。私はそれを試してみましょう。同じデータに対して複数のビューを作成する方がはるかに簡単であるため、FlexJsonは使いやすいと思います。 – huzeyfe
ところで、(可能であれば)インターフェイスの詳細について少し詳しく説明できるので、オブジェクトリストのシリアル化も必要になるので、コントローラでこの方法を使用することもできます。 – huzeyfe
リストの例で更新しました:) – maartencls