我已经从(这里)[https://doc.akka.io/docs/akka-http/current/routing-dsl/rejections.html]
的帮助下在我的路线中添加了拒绝处理程序这是我的代码
def TypeSequence(usertype: Type[UserType]) -> Callable[[Iterable[UserType]], Sequence[UserType]]:
...
我击中implicit def myRejectionHandler:RejectionHandler =
RejectionHandler.newBuilder()
.handle {
case MissingCookieRejection(cookieName) =>
val errorResponse = routeResponseMessage.getResponse(StatusCodes.BadRequest.intValue
,ServerMessages.MISSING_COOKIE,JsObject.empty)
complete(BadRequest,errorResponse)
}
.handle {
case AuthorizationFailedRejection =>
val errorResponse = routeResponseMessage.getResponse(StatusCodes.Forbidden.intValue
,ServerMessages.AUTH_FAIL,JsObject.empty)
complete((Forbidden, errorResponse))
}
.handle {
case ValidationRejection(msg, _) =>
val errorResponse = routeResponseMessage.getResponse(StatusCodes.InternalServerError.intValue
,ServerMessages.VALIDATION_FAILED + msg,JsObject.empty)
complete((InternalServerError, errorResponse))
}
.handle {
case MissingQueryParamRejection(param) =>
val errorResponse = routeResponseMessage.getResponse(StatusCodes.BadRequest.intValue
,param + " " + ServerMessages.MISSING_PARAM,JsObject.empty)
complete((BadRequest, errorResponse))
}
.handleNotFound {
val errorResponse = routeResponseMessage.getResponse(NotFound.intValue
,ServerMessages.NOT_FOUND,JsObject.empty)
complete((NotFound, errorResponse))
}.result()
val myExceptionHandler = ExceptionHandler {
case _: Exception =>
extractUri { uri =>
log.error(s"Request to $uri could not be handled normally")
complete(InternalServerError, routeResponseMessage.getResponse(InternalServerError.intValue, ServerMessages.INTERNAL_SERVER_ERROR, JsObject.empty))
}
}
val route: Route = handleRejections(myRejectionHandler) {
handleExceptions(myExceptionHandler) {
concat(
path("event-by-id") {
get {
parameters('id.as[String]) {
id =>
//logic here
}}}
post {
path("create-event") {
entity(as[Event]) {
event =>
//logic here
}}
}
val bindingFuture = Http().bindAndHandle(route, hostName, port)
时返回的消息是
localhost:8080/blah
但它应该显示我在HTTP method not allowed, supported methods: POST
中给出的自定义消息
我在这里做错了什么?