标签: spray

spray-can webservice正常关机

我有基于spray.io的webservice,它作为独立jar运行(我使用sbt assembly然后只是java -jar myws.jar).它与喷涂示例中的靴带非常相似,如下所示:

/** Bootstrap */
object Boot extends App {
   // we need an ActorSystem to host our application in
   implicit val system = ActorSystem("my-system")

   // create and start our service actor
   val service = system.actorOf(Props[MyServiceActor], "my-ws-service")

   implicit val timeout = Timeout(10.seconds)

   CLIOptionsParser.parse(args, CLIOptionsConfig()) map { config =>
     // start a new HTTP server
     IO(Http) ? Http.Bind(service, interface = config.interface, port = config.port)
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我只是在背景中运行该过程java -jar my-service "$@" &并停止 …

web-services scala akka spray

3
推荐指数
1
解决办法
2941
查看次数

我应该如何使用不同的状态代码响应Spray中的GET请求?

对于POST和PUT请求,我使用以下语法:

put {
  entity(as[CaseClass]) { entity =>
     returnsOption(entity).map(result => complete{(Created, result)})
       .getOrElse(complete{(NotFound, "I couldn't find the parent resource you're modifying")})
  }
}
Run Code Online (Sandbox Code Playgroud)

现在对于GET请求,我正在尝试做同样的事情,但我不能让它类似于我的PUT解决方案.使用GET请求执行此操作的好方法是什么?

更新:我已经使用以下hack:

(get & parameters('ignored.?)) {
  //TODO find a way to do this without ignored parameters
  (ingored:Option[String]) => {
     returnsOption().map(result => complete(result))
       .getOrElse(complete{(NotFound, "")})
  }
 }
Run Code Online (Sandbox Code Playgroud)

我希望类似的东西可以使用() =>或者ctx =>,但是它不会飞,因为它给编组提供了麻烦:

... could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[(spray.http.StatusCodes.ClientError, String)]
    }).getOrElse(ctx.complete{(NotFound, "")})
                             ^
Run Code Online (Sandbox Code Playgroud)

可能是因为这与我使用spray-json的事实有关吗?

spray

2
推荐指数
1
解决办法
4354
查看次数

如何在喷射路径中提取部分uri

我想创建一个REST服务,用户帐户的路径应该以id前缀开头,但作为路径本身的一部分,但是像这样:

http://localhost:8080/profile/id2314234
Run Code Online (Sandbox Code Playgroud)

我试过玩PathMatcher,但没有成功.我如何2314234从uri中提取?

routing scala match spray

2
推荐指数
1
解决办法
2412
查看次数

可以使用什么scala或java库以最有效的方式每天从1000个域抓取+ 10M页面

我正在制作网络抓取工具.我已经尝试过async http客户端,就像scala教程中的scala-and-akkaspray一样,但我无法让它工作.现在性能对我来说不是最重要的部分,但是后来我想在不改变库的情况下轻松提高req/s比率.

库应该能够在http标头上运行,并且不应该在dns解析时出现性能问题.什么库应该是最好的任务?

performance scala web-crawler spray

2
推荐指数
1
解决办法
2775
查看次数

spray-cache:仅在不是None时缓存

我有一个db-access我想缓存在我的akka​​/spray-application中.db返回Future [Option [X]].

我设置了一个lruCache并将其包装在我的db-access中.

我想要实现的是,仅缓存Option,如果它是Some(X)而不是,如果它是None.在后一种情况下,应再次从数据库中检索数据.

如果这会有所帮助,我可能会在未来失败......

到目前为止,我通过map再次从缓存中删除Option,如果它是None或者将来失败,则恢复:

cache(key) {
      server.one[X](...)
}.map {
   case Some(x) => Some(x)
   case None => {
     cache.remove(key)
     None
  }
}.recover {
  case x => userCache.remove(key)
}
Run Code Online (Sandbox Code Playgroud)

但这非常难看,更不用说地图中的副作用等等......

先感谢您,

caching scala spray

2
推荐指数
1
解决办法
624
查看次数

在Spray示例代码中暗示超出范围:这里发生了什么?

我已将Spray Client的示例代码复制到我自己的项目中,以便轻松使用它.我使用IntelliJ 13.

这是我的代码:

package mypackage

import scala.util.Success
import scala.concurrent.duration._
import akka.actor.ActorSystem
import akka.pattern.ask
import akka.event.Logging
import akka.io.IO
import spray.json.{JsonFormat, DefaultJsonProtocol}
import spray.can.Http
import spray.util._
import spray.client.pipelining._
import scala.util.Success
import scala.util.Failure

case class Elevation(location: Location, elevation: Double)
case class Location(lat: Double, lng: Double)
case class GoogleApiResult[T](status: String, results: List[T])

object ElevationJsonProtocol extends DefaultJsonProtocol {
  implicit val locationFormat = jsonFormat2(Location)
  implicit val elevationFormat = jsonFormat2(Elevation)
  implicit def googleApiResultFormat[T :JsonFormat] = jsonFormat2(GoogleApiResult.apply[T])
}

object SprayExample extends App {
  // we need an …
Run Code Online (Sandbox Code Playgroud)

scala intellij-idea spray

2
推荐指数
1
解决办法
1947
查看次数

从Json示例文件创建案例类结构

我有一个JSON表示(用于Web服务).JSON有很多字段.我想将Json反序列化(序列化)到案例类(案例到Json),以便我可以在Spray/Play框架中使用它.

在开始编写我的case类之前,我想知道是否有一些东西允许从一个示例Json创建一组case类.类似于如何为XML/SOAP模式创建Java类的东西.

json scala case-class spray playframework-2.0

2
推荐指数
1
解决办法
1359
查看次数

喷涂IO,为响应添加标头

我有(以前)REST spray.io webservice.现在,我需要在我的一个方法中生成SESSIONID以与其他一些方法一起使用.我希望它在响应标题中.

基本上,我想象逻辑如下:

 path("/...") {
   get {
     complete {
       // some logic here
       // .....
       someResult match {
         case Some(something) =>
           val sessionID = generateSessionID
           session(sessionID) = attachSomeData(something)
           // here I need help how to do my imaginary respond with header
           [ respond-with-header ? ]("X-My-SessionId", sessionID) {
             someDataMarshalledToJSON(something)
           }


         case None => throw .... // wrapped using error handler
       }
     } 
   }
 }
Run Code Online (Sandbox Code Playgroud)

但是,它并不完整,我指的是respondWithHeader指令.我需要一个建议.

scala spray spray-dsl

2
推荐指数
1
解决办法
3463
查看次数

如何创建一个只接受可以用spray-json转换为Json的类型的函数

我有一个函数,它将采用某种类型的参数,将该参数转换为Json然后返回它.这里的问题是我的函数不能在参数上调用.toJson,因为它不知道它.

例:

def convertToJson[A](toConvert: A): JsValue = 
  toConvert.toJson
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,但我想知道我怎么能做出类似这项工作的东西?我怎么能推广这个函数来处理我所有可序列化的案例类?我可以添加一些统一类型,允许此函数接受所有可序列化的案例类.

如果需要更多信息或需要更好的解释,请告诉我.

scala spray spray-json

2
推荐指数
1
解决办法
105
查看次数

无法找到隐式json格式的证据参数的隐含值

我试图简单地为我的case类创建一个json格式:

case class ImageRequest (inputs: Array[ImageObject])

case class ImageObject(data: Data)

case class Data(image: Image)

case class Image(url: String)
Run Code Online (Sandbox Code Playgroud)

这是隐式格式:

object ApplicationProtocol extends DefaultJsonProtocol {

    lazy implicit val ImageRequestFormat = jsonFormat(ImageRequest, "inputs")
    lazy implicit val ImageObjectFormat = jsonFormat(ImageObject, "data")
    lazy implicit val DataFormat = jsonFormat(Data, "image")
    lazy implicit val ImageFormat = jsonFormat(Image, "url")
  }
Run Code Online (Sandbox Code Playgroud)

我收到错误:

> could not find implicit value for evidence parameter of type
> connectors.ClarifaiConnector.ApplicationProtocol.JF[Array[model.ImageObject]]
> [error]     lazy implicit val ImageRequestFormat =
> jsonFormat(ImageRequest, "inputs") [error]                            
> ^ …
Run Code Online (Sandbox Code Playgroud)

scala spray spray-json

2
推荐指数
1
解决办法
1599
查看次数