テンプレート エンジンを使用して有効な JSON を生成したいと考えています。特に、テンプレート内のプレースホルダーをモデル クラスのプロパティに置き換えるエンジンが必要です。エンジンは、 のような複雑なクラスの使用コンバーターを許可する必要がありますjava.util.Date
。さらに、テンプレート自体でリストを明示的に処理したくはありません。代わりに、コレクションのような型で有効な JSON 配列を生成する必要があります。
これはテンプレートの例です。
{
"uber" :
{
"version" : "1.0",
"data" :
[
{
"rel" : $relations,
"data" :
[
{"name" : "firstname", "value" : $firstname},
{"name" : "lastname", "value" : $lastname}
]
}
]
}
}
$relations
このテンプレートの変数 ( 、$firstname
、$lastname
) を、リレーション、名、姓のプロパティを持つモデルから置き換えたいと考えています。これは、ネストされたプロパティでも機能するはずです。(例: $address.street
)
モデルをバインドすると、JSON は次のようになります。
{
"uber" :
{
"version" : "1.0",
"data" :
[
{
"rel" : ["person"],
"data" :
[
{"name" : "firstname", "label" : "Firstname", "value" : "Max"},
{"name" : "lastname", "label" : "Lastname", "value" : "Mustermann"}
]
}
]
}
}
エンジンは、必要に応じて引用符を使用する必要があることに注意してください。
これを行うことができるテンプレート ライブラリはありますか、それとも独自のライブラリを展開する必要がありますか?
私はすでに次のライブラリを調べました:
- フリーマーカー
- 速度
- 文字列テンプレート
また、いくつかのスレッドも読みました。
しかし、今のところ満足のいく解決策は見つかりませんでした。
背景情報:
Uberdata
は、データをエンコードするために要素をネストする、ドメインに依存しないハイパーメディア形式です。多くのオブジェクトを作成し、セッターを介してそれらをネストする必要があるため、Jackson のようなライブラリでシリアル化する場合、この形式を作成するのは非常に面倒です。
そのため、テンプレートを使用して出力を生成し、ユーザーがテンプレートを作成し、後でモデルをこのテンプレートにバインドして出力を生成できるようにすることを考えました。