2

フィルターを使用して Grails 1.3.7 アプリケーションで JSON 応答を変更しようとしていますが、期待どおりに動作しません。私がやりたいことはrender myobject as JSON、アクションで次のようなものを使用し、フィルターで次のようなことを行うことです。

jsonPostProcess(controller:'json', action:'*') {
    after = {
        if (myCustomLogicHere) {
            return false // render empty string
        } else if (more logic) {
            // write something else to the response
        }
    }
}

after実際には、ブロックが実行される前に応答が返されます。についても同様ですafterView

Grails の方法でやろうとしていることを達成する方法はありますか?

4

2 に答える 2

1

コントローラーから戻り、フィルターからmyobject呼び出します。例:render

class JsonController {

    someAction = {

        ...
        myobject
    }
}

jsonPostProcess(controller:'json', action:'*') {
    after = {

        myobject ->

        if (myCustomLogicHere) {
            return false // render empty string
        } else if (more logic) {
            // write something else to the response
        }

        render myobject as JSON
    }
}
于 2012-07-10T23:46:49.553 に答える
0

@JonoBの答えはほぼ正しいです:

コントローラーから myobject を返し、次にフィルターから render を呼び出します。

class JsonController {
    someAction = {
         //...some logic
         return [myobject: myobject]
    }
}

そしてフィルターで

jsonPostProcess(controller:'json', action:'*') {
    after = {
        Map model ->
            //... my custom logic here
            render model.myobject as JSON
            return false
    }
}
于 2016-02-02T16:14:08.823 に答える