как добавить статусное сообщение на граале ответить - PullRequest
0 голосов
/ 28 февраля 2019

Я создал метод, который вызывается после каждого неотслеживаемого исключения и отвечает представлению gson:

void handleError(){
        respond([status: 500, view: "/customErr"], [
                code      : 500,
                message   : "whatever internal error",
        ])
}

это работает нормально, но главная проблема, с которой я сталкиваюсь, заключается в том, что мой клиент (другой сервер действует как клиент) получает ответ http со статусом 500, но сообщение о статусе является нулевым.Я проверил ответные документы и не вижу сообщения о недвижимости или что-то в этом роде.это, если мой клиент получает:

wslite.rest.RESTClientException: 500 null

, и это значение NULL является сообщением о состоянии ответа, которое не установлено Grails. Как я могу добавить подробное сообщение в свой ответ?идиллически что-то вроде этого:

  respond([status: 500, statusMessage: "my custom 
    message", view: "/customErr"], [
                code      : 500,
                message   : "whatever internal error",
        ])

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Grails использует Servlet API HttpServletResponse для создания ответа .

Теперь проверьте документ Java для HttpServletResponse класса.

есть только 2 способа определения сообщения о состоянии:

  • void setStatus(int sc, String msg) устарело .Начиная с версии 2.1, из-за неоднозначного значения параметра сообщения.Чтобы установить код состояния, используйте setStatus (int), для отправки ошибки с описанием используйте sendError (int, String).
  • void sendError(int sc, String msg) Отправляет клиенту ответ об ошибке с помощьюуказанный статус и очищает буфер.По умолчанию сервер создает ответ, который выглядит как HTML-страница с ошибкой сервера в формате , содержащая указанное сообщение, с типом содержимого «text / html».

Первыйодин устарел.Второй отправляет сообщение о состоянии, но не отправляет тело - в основном это используется для фатальных ошибок ...

Итак, официально в документации сервлета нет способа отправить в ответ и сообщение, и тело.


Вопрос сложный.Поскольку в соответствии с Apache Tomcat функция «пользовательского сообщения о состоянии» будет удалена, начиная с версии 9: https://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html#Other

Но в соответствии с RFC2616 sec 6.1.1 : Приведенные здесь фразы причины:только рекомендации - они МОГУТ быть заменены локальными эквивалентами, не влияя на протокол.

0 голосов
/ 05 марта 2019

Это не дает прямого ответа на ваш вопрос и может не решить вашу проблему, в зависимости от того, насколько вы контролируете приложение, которое получает ошибку, но вы можете добавить сообщения об ошибках в заголовок ответа, который должен пройти доклиент (если он знает, чтобы проверить их).

String errorMessage = "Whatever Internal Server Error"
response.addHeader("custom-error", errorMessage)
response.sendError(500, errorMessage)

Это отправит сообщение в заголовке и в качестве ответного сообщения ... Я не знаю, работает ли это с respond() иликак это взаимодействует с объектом response в контроллере ... но если вы отвечаете на рендеринг представления как страницы ошибки, вы сможете добавить сообщение к model, включенному в вызов respond()и показать это на странице с ошибкой (по крайней мере, я так думаю).

0 голосов
/ 01 марта 2019

попробуйте это в контроллере

render "<script type=\"text/javascript\">" +
                    "alert('沒有權限,將關閉此頁')" +
                                        "});" +
                    "</script>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...