2017-01-30 45 views
0

我正在开发一个服务,在一个路径上使用不同的查询参数调用。我有一个路由绑定到http:akka-http如何接受无效的URI [不会解决]

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&param2=adäöü 

我知道,这些网址是无效的,但其中一项规定是,即使这些字符的请求被接受UND我处理他们的URL编码。 问题是,当我调用上述服务时,akka-http拒绝带有Response-status 400的请求,甚至没有将它交给我的代码。 有没有一种方法可以让我自己处理这些请求并处理它们,或者让akka-http对我进行特殊字符的URL编码。

编辑: 不会解决

+0

你能张贴堆栈跟踪? –

+0

不知道如何,因为打印堆栈跟踪的代码中没有错误,并且akka-http仅响应400. –

+0

它可能是抛出异常的'MyHandler.genExternResponse'吗?抛出的异常将转换为400.如果将代码更改为完整(“ok”),则不会出现错误,所以它不太可能成为Akka的错 –

回答

1

尝试这个

val route: Route = { 
    get { 
    pathPrefix("myRoute"){ 
     parameters('params) 
      { params => 
      complete(
       MyHandler.genExternResponse(params) 
      ) 
     } 
    } 
} 

val bindingFuture = Http().bindAndHandleAsync(Route.asyncHandler(new myEndpoint().route), "localhost", 8081) 
+0

可悲的是,没有工作: 〜curl -i http:// localhost:8080/myRoute \?page \ =täst HTTP/1.1 400错误请求 服务器:akka-http/10.0.3 日期:2017年1月31日星期二10:10: 18 GMT Connection:close Content-Type:text/plain;字符集= UTF-8 内容长度:96 非法请求目标:无效输入'Ã',预期原始查询字符或'EOI'(第1行,第13列)% –

+0

更改参数名称curl -i localhost:8080/myRoute?params =täst – Dhirendra

+0

也这样做了,请求没有到达我的端点。我认为akka-http无法从正常配置的连接创建HttpRequest,因为它包含非7位ASCII字符 –