【发布时间】:2017-01-30 11:55:05
【问题描述】:
我正在开发一种服务,该服务在具有不同查询参数的一条路径上调用。我已经将路由绑定到 Http:
val route: Route = {
get {
pathPrefix("myRoute"){
parameterMap{ params =>
complete(
MyHandler.genExternResponse(params)
)
}
}
}
val bindingFuture = Http().bindAndHandleAsync(Route.asyncHandler(new myEndpoint().route), "localhost", 8081)
由于我对使用的参数没有任何影响,因此我无法消除包含未编码特殊字符(如德语变音符号或商标符号)的调用。 例如
www.myhost.com/myRoute?param1=asd¶m2=adäöü
我知道这些 URL 无效但其中一项要求是即使带有这些字符的请求也被接受,并且我使用 URL 编码处理它们。 问题是,当我像上面那样调用服务时,akka-http 拒绝了响应状态为 400 的请求,甚至没有将其交给我的代码。 有没有一种方法可以让我自己捕获这些请求并处理它们,或者让 akka-http URL 为我编码特殊字符。
编辑: 解决不了
【问题讨论】:
-
你能发布一个堆栈跟踪吗?
-
不知道如何,因为打印堆栈跟踪的代码没有错误,而 akka-http 只是响应 400。
-
会不会是
MyHandler.genExternResponse抛出异常?此处抛出的异常将转换为 400。如果将代码更改为完整(“ok”),则不会收到错误,因此不太可能是 Akka 的错 -
不,问题是,请求甚至从未到达我的端点。即使我使用 akka-http 文档中最基本的示例,它也不会使用带有变音符号的 uri 参数
-
嗯,很奇怪,当我尝试使用
complete("ok")时,它确实可以正常工作