Как просмотреть и отфильтровать ответ в Grails после обработки действия?

Я пытаюсь изменить ответы JSON в своем приложении Grails 1.3.7 с помощью фильтров, но они работают не так, как я ожидаю. То, что я хотел бы сделать, это использовать что-то вроде 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,

Есть ли способ выполнить то, что я пытаюсь сделать способом Грааля?

2 ответа

Решение

@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
    }
}

Вернуть 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
    }
}
Другие вопросы по тегам