2017-12-20 3 views
0
@scala.throws[scala.Exception] 
def processQuery(searchQuery : scala.Predef.String) : scala.concurrent.Future[io.circe.Json] = { /* compiled code */ } 

을 차단 시도 블록 외부는 try입니다. 또는 예외를 처리하는 다른 방법이 있습니까? processQuery 기능을 포함하는 파일을 편집 할 수 없습니다. 읽기 전용입니다. 길에서 선언 된 경우핸들 예외는 외부 내가 후에 성공의 경우는 <code>try</code> 블록 내부에 initailized 할 수 있으며, 처리 할 수 ​​있도록 라인 3에서 <code>searchResult</code> 변수를 선언하려면 어떻게

def index = Action.async{ implicit request => 
    val query = request.body.asText.get 
    var searchResult : scala.concurrent.Future[io.circe.Json] = Future[io.circe.Json] //line 3 
    var jsonVal = "" 
    try { 
    searchResult = search.processQuery(query) 
    } catch { 
    case e :Throwable => jsonVal = e.getMessage 
    } 

    searchResult onSuccess ({ 
    case result => jsonVal = result.toString() 
    }) 

    searchResult.map{ result => 
    Ok(Json.parse(jsonVal)) 
    }  
} 

이은 (는) recover 방법 도움말을 사용하여 컴파일 오류

답변

0

겠습니까을 보여주는 것 선언 된? 또한 var을 피하고 가능한 경우보다 기능적인 접근 방법을 사용하는 것이 좋습니다.

try { 
    processQuery.... 
    ... 
} catch { 
    ... 
} 
+0

사용 여부를 잘 모르는 경우 종속성을 해결하는 데 어려움이 있습니다. import io.circe.Json을 추가하면 Json.obj에서 synrax 오류가 발생합니다 (기호 Json을 해결할 수 없음). 반면 가져 오기를 주석 처리하고 가져 오기 play.api.libs.Json을 사용하면 이전 오류가 아닙니다. 거기에 "결과"-> Json (found : (String, Json) eequired :(String, Json.JsValueWrapper))에서 오류가 발생했습니다. –

+0

Json.obj는 Json 객체를 만드는 방법입니다. 나는 iocirce 라이브러리를 모른다. 그래서 어떻게해야 하는지를 말할 수는 없지만, 방법이있을 것이다. – wwkudu

0

I : 내가 다른 catchtry 전체에 코드를 삽입 할 필요가있을 수있다 생각

def index = Action.async { implicit request => 
    processQuery(request.body.asText.get).map { json => 
    Ok(Json.obj("success" -> true, "result" -> json)) 
    }.recover { 
    case e: Throwable => Ok(Json.obj("success" -> false, "message" -> e.getMessage)) 
    } 
} 

: 내 세계에서 (그리고 JSON 라이브러리를 재생), 내가 좋아하는 뭔가에 도착 희망 들어오는 JSON에 대해 유효성을 검사하고 유효성 검사 결과를 폴링하는 방법이 있습니다.

def returnToNormalPowerPlant(id: Int) = Action.async(parse.tolerantJson) { request => 
    request.body.validate[ReturnToNormalCommand].fold(
     errors => { 
     Future.successful{ 
      BadRequest(
      Json.obj("status" -> "error", "message" -> JsError.toJson(errors)) 
     ) 
     } 
     }, 
     returnToNormalCommand => { 
     actorFor(id) flatMap { 
      case None => 
      Future.successful { 
       NotFound(s"HTTP 404 :: PowerPlant with ID $id not found") 
      } 
      case Some(actorRef) => 
      sendCommand(actorRef, id, returnToNormalCommand) 
     } 
     } 
    ) 
    } 
관련 문제