У меня есть следующее действие контроллера в качестве преобразователя формы:
def importCompletionsSubmit(indexName: String) = AuthenticatedAction {
Action.async {
implicit request => {
completionsForm.bindFromRequest().fold(
errors => Future.successful(Ok(html.crudindex.importCompletionsForm(indexName, errors))),
completions => {
val autoCompletionService = new AutoCompletionService(new Elasticsearch)
autoCompletionService.importCompletions(indexName, completions.text) map {
result: BulkImportResult =>
if (result.error) Redirect(routes.ListIndices.index(Option.empty[String])).flashing("error" -> Messages("error.bulkItemsFailed", result.failures))
else Redirect(routes.ListIndices.index(Option.empty[String])).flashing("success" -> Messages("success.completionsAdded", result.requests))
}
}
)
}
}
}
Я знаю, что могу изменить значение максимальной длины для этого действия, но я хотел бы отправить пользователя обратно в форму с хорошим сообщением об ошибке, когда он вводит слишком много текста. Если тело запроса превышает максимальную длину по умолчанию, я получаю полностью пустую страницу, и только консоль браузера показывает «413 (Слишком большой объект запроса)». Я попытался поймать эту ошибку в своем глобальном объекте, но это ничего не изменило. Мне кажется, что глобальный триггер onError не вводится, когда парсер отправляет обратно страницу с ошибкой. Еще чистая страница. Я также пытался поймать эту ошибку внутри действия, но мне кажется, что код действия не введен, потому что анализатор тела уже выдает эту пустую страницу с ошибкой.
Есть ли способ отправить пользователя обратно к действию формы, когда тело превышает максимальную длину?