Использование метода ответа в Grails 2.3.6 с форматом json и кодом состояния

Я пытаюсь использовать метод response, который существует в Grails 2.3, для возврата некоторого сообщения об исключении и кода состояния в формате JSON, но пока не удалось добиться успеха с кодом возврата.

Я установил ExceptionController, который будет обрабатывать все исключения, выдаваемые остальными контроллерами. Вот:

class ExceptionController {

    static responseFormats = ['json','xml']

    def handleForbiddenException(ForbiddenException e){
        respond 'error':e.getMessage(),status:403
    }

    def handleNotFoundException(NotFoundException e){
        respond 'error':e.getMessage(),status:404
    }

    def handleInvalidRequestException(InvalidRequestException e){
        respond 'error':e.getMessage(), status:422
    }

    def handleGeneralException(Exception e){
        respond 'error':e.getMessage(),status:500
    }
}

Но в простом интеграционном тесте код результата всегда равен 200..

Я действительно не знаю, какой правильный формат использовать с этим методом для установки кода состояния. Я попробовал несколько вариантов без успеха

respond 'error':e.getMessage(), status:422
respond e.getMessage(), status:422
respond object:['error':e.getMessage()], arguments:[status:422]
respond object:['error':e.getMessage()], model:[status:422]
respond object:['error':e.getMessage()], [status:422]

ОБНОВЛЕНИЕ Я нашел формат, который работает, но не думаю, что это лучшее решение...

respond JSON.parse("{'error':'${e.getMessage().encodeAsHTML()}'}"),[status:403]

1 ответ

Решение

Взгляните на https://github.com/grails/grails-core/commit/4e2f8de61f4383b92d79f5e34c3d1d0d151afb60. Кажется, вы можете использовать свойство errorsHttpStatus, но я прочитал в коде, что вам нужно будет передать экземпляр Errors, а не исключение.

Другие вопросы по тегам