@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

modelToJsonでInverseModelListRefをJSONに変換する

Google App Engine for Javaslim3でやっていると、modelToJsonを使ってJSON形式でレスポンスを返す事が多いです。
slim3で1対多の関連はModelRefとInverseModelListRefで表します。
ModelRefはmodelToJsonに対応していますが、InverseModelListRefは対応していないようですね。
でも、modelToJsonしたケースはあると思いますので、やってみます。

// InverseModelListRefを定義する
@Attribute(persistent = false)
private InverseModelListRef<Bar, Foo> barListRef = new InverseModelListRef<Bar, Foo>(Bar.class, "fooRef", this, new Sort("key", SortDirection.ASCENDING));

// ダミーのBARのリストを定義する
@Json(coder = Expanded.class)
@Attribute(persistent = false)
@SuppressWarnings("unused") // 直接は参照しないため
private List<ModelRef<Bar>> bars;

// InverseModelListRefのgetter
public InverseModelListRef<Bar, Foo> getBarListRef() {
    return barListRef;
}

// JSONを取得するためのgetter
public List<ModelRef<Bar>> getBars() {
    List<ModelRef<Bar>> bars = new ArrayList<ModelRef<Bar>>();
    for (Bar bar : barListRef.getModelList()) {
        ModelRef<Bar> modelRef = new ModelRef<Bar>(Bar.class);
        modelRef.setModel(bar);
        bars.add(modelRef);
    }
    return bars;
}

少し無理やりな感じもしますが、これで出来るようになりました。