2014-02-17 1 views
1

에 대한 리디렉션 I이 양식 포스트 해결로 다음 컨트롤러 액션 : 나는이 작업을 위해 최대 길이 값을 변경할 수 있지만, 나는 싶습니다 알고플레이 2.2.1 - 413 REQUEST_ENTITY_TOO_LARGE

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 트리거가 입력되지 않은 것처럼 보입니다. 아직도 빈 페이지. 나는 또한 액션 내에서 그 에러를 잡으려고했으나 바디 파서가 이미이 빈 에러 페이지를 던지고 있기 때문에 액션 코드가 입력되지 않은 것으로 보인다.

본문이 최대 길이를 초과하면 양식 작업으로 다시 보낼 수있는 방법이 있습니까?

답변

2

이런 식으로 뭔가가 당신을 위해 일해야합니다

def test = Action.async(parse.maxLength(1024, parse.multipartFormData)) { implicit request => 
    Future(request.body match { 
    case Left(MaxSizeExceeded(length)) => Ok(your_pretty_error_page.scala.html) 
    case Right(body) => { 
     ... 
    } 
    }) 
} 
+0

최고 감사합니다 :) – MeiSign