2.2.1 Scala oʻynang - 413 REQUEST_ENTITY_TOO_LARGE uchun yoʻnaltirish

Shakldan keyingi hal qiluvchi sifatida menda quyidagi Controller amali bor:

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))
          }
        }
      )
    }
  }
}

Men bu amal uchun maksimal uzunlik qiymatini o'zgartirishim mumkinligini bilaman, lekin men qilmoqchi bo'lgan narsa foydalanuvchini juda ko'p matn kiritganida yaxshi xato xabari bilan formaga qaytarishdir. Agar so'rov tanasi standart maksimal uzunlikdan oshsa, men butunlay bo'sh sahifani olaman va faqat brauzer konsolida "413 (So'rov ob'ekti juda katta)" ko'rsatiladi. Men ushbu xatoni global ob'ektimda ushlashga harakat qildim, lekin bu hech narsani o'zgartirmadi. Menimcha, tahlilchi xato sahifasini qaytarib yuborganda global onError triggeri kiritilmagandek tuyuladi. Hali bo'sh sahifa. Men ushbu xatoni amalda aniqlashga harakat qildim, lekin menimcha, harakat kodi kiritilmagan, chunki tana tahlilchisi allaqachon bu bo'sh xato sahifasini tashlamoqda.

Tana maksimal uzunlikdan oshib ketganda, foydalanuvchini ariza harakatiga qaytarishning bir usuli bormi?


person MeiSign    schedule 17.02.2014    source manba


Javoblar (1)


Siz uchun shunga o'xshash narsa ishlashi kerak:

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) => {
      ...
    }
  })
}
person serejja    schedule 17.02.2014
comment
Ajoyib, rahmat :) - person MeiSign; 18.02.2014