2016-10-24 10 views
0

Akka HttpでPOST本体を検証できますか?Akka HTTPでのPOSTパラメータの検証

Case Class Validationは、取得リクエストでのみ動作するようです。

例として:

case class User(name: String){ 
    require(name) 
} 
..... 
(post & entity(as[User])) { user => 
      complete(doSomething(user.name)) 
      } 

私はあなたがあなたにPOSTを処理し、完全なディレクティブ

(path("stats") & parameter("idsParam")) { idsParam => 
    complete { 
     require(idsParam.length > 1) 
     val ids = idsParam.split(",").map(v => CaseId(v).value) 
     DBManager.getArticleStats(ids).map { case (id, stats) => IdWithValue(CaseId(id), stats) } 
    } 
} 

の範囲内requireを使用することができますValidationRejection拒否

答えて

1

をスローするように上記のコードを希望します要求。

通常、私はすべての例外をjsonのようなAPIクライアントが期待する形式にラップするカスタム例外ハンドラを持っています。 requireIllegalArgumentExceptionを投げるので、私たちが望むならそれを特別に扱いましょう。 ErrorResponsespray-json

+0

感謝を使用してJSONにシリアライズされている私の場合クラスです

protected implicit def myExceptionHandler = ExceptionHandler { case ex: IllegalArgumentException => ctx => { val cause = ex.getCause ex.printStackTrace() ctx.complete(StatusCodes.InternalServerError, ErrorResponse(ex.code, ex)) } case ex: Throwable => ctx => logger.warning("Request {} could not be handled normally", ctx.request) ex.printStackTrace() ctx.complete(StatusCodes.InternalServerError, ErrorResponse(StatusCodes.InternalServerError.intValue, ex)) } 

。例を共有していますか?どのように使用するかはっきりしていませんが、完全内に必要です – EugeneMi

+0

確かです。追加されました。 – expert

+0

ありがとう! ValidationRejectionをスローする必要はありませんか? – EugeneMi

関連する問題