3

クラス名などの一部のフィールドをjsonモデルから除外できるようにする目的で、grailsプロジェクトでカスタムマーシャラーを作成しています。ブートストラップで呼び出される春の豆を介してマーシャラーを登録しています。

ただし、このマーシャリングコードのほとんどは非常に反復的であり、テクニックによってマーシャラーが多すぎることがわかりました。

より一般的なものがあるかどうかを知りたいのですが、JSON変換から特定のフィールドを常に無視することでしたので、すべてに対してカスタムマーシャラーを常に作成する必要はありません。

デフォルトのGroovyJSONコンバーターをオーバーライドするにはどうすればよいですか?

4

1 に答える 1

0

InstanceMethodBasedMarshaller を使用すると、各ドメイン クラスで toJSON メソッドを簡単に定義できます。これにより、多数のカスタム マーシャラーを登録しなければならないという問題が解決されます。代わりに、それらすべてを支配する 1 つのマーシャラーが必要になります。

ただし、カスタム マーシャラーを作成する負担を、各ドメイン クラスでカスタムの toJSON() 実装を記述することに移すだけです。これを解決するには、groovy カテゴリを利用できます。これは、戦略パターンと無関係なクラス間で共通の動作を提供するように設計されています。何かのようなもの:

//Category
class JSONOutputCategory {
    static customizeJSON(Object self) {
        // do whatever standard thing here
    }
}

//Domain
class MyDomain {
...
    public void toJSON(JSON json) {
        use(JSONOutputCategory){
            json.build {
               customizeJSON(this)
            }
        }
    }
}

CAVEAT EMPTOR: 私はこれをまったくテストしていません。これは impl というよりも概念です。

于 2012-10-22T16:21:29.517 に答える