У меня есть сервлет scalatra с несколькими REST API. Для ведения журнала я использую метод after() для вывода кода состояния возврата после вызова каждого API.
after() {
logger.info("request {} {} returned with status code {}", request.getMethod, request.getRequestURL, response.getStatus.toString)
}
Я заметил, что когда метод возвращается с halt
, код состояния печатается правильно, но когда метод возвращает код состояния в последней строке (без halt
), код состояния, который будет напечатан, всегда будет 200, независимо от реального статус возвращен.
Например:
post("/users/:user") {
try {
//some logic here...
if(condition)
halt(InternalServerError("DB error")) //this will cause status 500 to be printed in the 'after' method
} catch {
case e: Exception =>
InternalServerError("an unknown error occurred") //this will cause status 200 to be printed in the 'after' method
}
}
В обоих случаях пользователь получает реальный код состояния (500).
Любая идея, почему это происходит? Это ошибка? Я разместил этот вопрос в списке рассылки scalatra-user, но этот список, похоже, совершенно неактивен.
Ализа