Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 找不到Akka HTTP路由?_Scala_Akka_Spray_Akka Http - Fatal编程技术网

Scala 找不到Akka HTTP路由?

Scala 找不到Akka HTTP路由?,scala,akka,spray,akka-http,Scala,Akka,Spray,Akka Http,我正在学习使用Akka Http构建服务器,这就是我到目前为止所写的内容 import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.server.Directives._ import akka.stream.{Materializer, ActorMaterializer} import spray.json.DefaultJsonProtocol import akka.htt

我正在学习使用Akka Http构建服务器,这就是我到目前为止所写的内容

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.stream.{Materializer, ActorMaterializer}
import spray.json.DefaultJsonProtocol
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._

import scala.concurrent.ExecutionContextExecutor


// todo() : add event timestamp
case class ECFailure(symbolicName:String)


trait Protocols extends DefaultJsonProtocol {
  implicit val ecFailureFormat = jsonFormat1(ECFailure.apply)
}

trait EmailService extends Protocols {
  implicit val system: ActorSystem
  implicit def executor: ExecutionContextExecutor
  implicit val materializer: Materializer

  val route =
    logRequestResult("email-service") {
      pathPrefix("ec") {
        (post & entity(as[ECFailure])) { ecFailure =>
          complete {
            println("received: " + ecFailure)
            "Done"
          }
        }
      }
      path("") {
        get {
          complete {
            "Welcome."
          }
        }
      }
    }
}

object ECServer extends App with EmailService {
  override implicit val system = ActorSystem("ec-server")
  override implicit val executor = system.dispatcher
  override implicit val materializer = ActorMaterializer()
  val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)
}
当我运行它并到达端点时,我看到

$curl-vhttp://localhost:8080
*重新生成的URL到:http://localhost:8080/
*在DNS缓存中找不到主机名
*正在尝试::1。。。
*连接到::1端口8080失败:连接被拒绝
*正在尝试127.0.0.1。。。
*已连接到本地主机(127.0.0.1)端口8080(#0)
>GET/HTTP/1.1
>用户代理:curl/7.37.1
>主机:本地主机:8080
>接受:*/*
> 
但另一个端点不可用

$curl-v-XPOST-d“{'symbolicName':'ABC'}”-H“内容类型:application/json”http://localhost:8080/ec
*在DNS缓存中找不到主机名
*正在尝试::1。。。
*连接到::1端口8080失败:连接被拒绝
*正在尝试127.0.0.1。。。
*已连接到本地主机(127.0.0.1)端口8080(#0)
>POST/ec HTTP/1.1
>用户代理:curl/7.37.1
>主机:本地主机:8080
>接受:*/*
>内容类型:application/json
>内容长度:23
> 
*完全发送上载:23个字节中的23个
未找到
在服务器上,我将日志视为

Connected to the target VM, address: '127.0.0.1:58024', transport: 'socket'
[DEBUG] [07/28/2015 14:50:59.528] [main] [EventStream(akka://ec-server)] logger log1-Logging$DefaultLogger started
[DEBUG] [07/28/2015 14:50:59.530] [main] [EventStream(akka://ec-server)] Default Loggers started
[DEBUG] [07/28/2015 14:51:00.016] [ec-server-akka.actor.default-dispatcher-6] [akka://ec-server/system/IO-TCP/selectors/$a/0] Successfully bound to /127.0.0.1:8080
[DEBUG] [07/28/2015 14:51:03.917] [ec-server-akka.actor.default-dispatcher-6] [akka://ec-server/system/IO-TCP/selectors/$a/0] New connection accepted
[DEBUG] [07/28/2015 14:51:04.258] [ec-server-akka.actor.default-dispatcher-13] [ActorSystem(ec-server)] email-service: Response for
  Request : HttpRequest(HttpMethod(GET),http://localhost:8080/,List(User-Agent: curl/7.37.1, Host: localhost:8080, Accept: */*),HttpEntity.Strict(none/none,ByteString()),HttpProtocol(HTTP/1.1))
  Response: Complete(HttpResponse(200 OK,List(),HttpEntity.Strict(text/plain; charset=UTF-8,ByteString(87, 101, 108, 99, 111, 109, 101, 46)),HttpProtocol(HTTP/1.1)))
[DEBUG] [07/28/2015 14:51:06.265] [ec-server-akka.actor.default-dispatcher-19] [akka://ec-server/system/IO-TCP/selectors/$a/0] New connection accepted
[DEBUG] [07/28/2015 14:51:06.284] [ec-server-akka.actor.default-dispatcher-17] [ActorSystem(ec-server)] email-service: Response for
  Request : HttpRequest(HttpMethod(POST),http://localhost:8080/ec,List(User-Agent: curl/7.37.1, Host: localhost:8080, Accept: */*),HttpEntity.Strict(application/json,ByteString(123, 39, 115, 121, 109, 98, 111, 108, 105, 99, 78, 97, 109, 101, 39, 58, 32, 39, 65, 66, 67, 39, 125)),HttpProtocol(HTTP/1.1))
  Response: Rejected(List())

这里有什么不正确的地方?

不同路线之间缺少问题
~
。下面的代码修复了它

  val route =
    logRequestResult("email-service") {
      pathPrefix("ec") {
        (post & entity(as[ECFailure])) { ecFailure =>
          complete {
            println("received: " + ecFailure)
            "Done"
          }
        }
      } ~
        path("") {
          get {
            complete {
              "Welcome."
            }
          }
        }
    }
卷曲有效吗

$curl-v-XPOST-d'{“symbolicName”:“ABC”}'-H“内容类型:application/json”http://localhost:8080/ec
*在DNS缓存中找不到主机名
*正在尝试::1。。。
*连接到::1端口8080失败:连接被拒绝
*正在尝试127.0.0.1。。。
*已连接到本地主机(127.0.0.1)端口8080(#0)
>POST/ec HTTP/1.1
>用户代理:curl/7.37.1
>主机:本地主机:8080
>接受:*/*
>内容类型:application/json
>内容长度:23
> 
*完全发送上载:23个字节中的23个
不同路线之间缺少问题
~
。下面的代码修复了它

  val route =
    logRequestResult("email-service") {
      pathPrefix("ec") {
        (post & entity(as[ECFailure])) { ecFailure =>
          complete {
            println("received: " + ecFailure)
            "Done"
          }
        }
      } ~
        path("") {
          get {
            complete {
              "Welcome."
            }
          }
        }
    }
卷曲有效吗

$curl-v-XPOST-d'{“symbolicName”:“ABC”}'-H“内容类型:application/json”http://localhost:8080/ec
*在DNS缓存中找不到主机名
*正在尝试::1。。。
*连接到::1端口8080失败:连接被拒绝
*正在尝试127.0.0.1。。。
*已连接到本地主机(127.0.0.1)端口8080(#0)
>POST/ec HTTP/1.1
>用户代理:curl/7.37.1
>主机:本地主机:8080
>接受:*/*
>内容类型:application/json
>内容长度:23
> 
*完全发送上载:23个字节中的23个
您需要在
路径前缀(“ec”){,,,
路径(“{…}”)之间添加
~
。您需要在
路径前缀(“ec”){,,,,
路径(“{…})之间添加
~
。是的,这是一个无法可靠检测的难题。避免此类问题的最佳实践是尽可能在路由树中使用括号而不是大括号。是的,这是一个无法可靠检测的难题。避免此类问题的最佳实践是在路由树中使用括号而不是大括号只要有可能,就把树砍掉。