Mam następującą akcję kontrolera jako narzędzie do rozpoznawania postów w formularzu:
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))
}
}
)
}
}
}
Wiem, że mogę zmienić maksymalną długość tej akcji, ale chciałbym odesłać użytkownika z powrotem do formularza z komunikatem o błędzie, gdy wprowadzi za dużo tekstu. Jeśli treść żądania przekracza domyślną maksymalną długość, otrzymuję całkowicie pustą stronę i tylko konsola przeglądarki pokazuje „413 (zbyt duża jednostka żądania)”. Próbowałem wychwycić ten błąd w moim obiekcie globalnym, ale to niczego nie zmieniło. Wydaje mi się, że globalny wyzwalacz onError nie jest wprowadzany, gdy parser odsyła stronę błędu. Wciąż pusta strona. Próbowałem także wychwycić ten błąd wewnątrz akcji, ale wydaje mi się, że kod akcji nie został wprowadzony, ponieważ analizator treści już wyrzuca tę pustą stronę błędu.
Czy istnieje sposób na odesłanie użytkownika z powrotem do akcji formularza, gdy treść przekracza maksymalną długość?