- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想支持提交到同一 URL 的几种不同的内容类型:
例如:application/x-www-form-urlencoded
, multipart/form-data
, application/json
我想做类似的事情:
post {
contentType(`application/x-www-form-urlencoded`) |
contentType(`multipart/form-data`) {
// user POSTed a form
entity(as[MyCaseClass]) { data =>
complete { data.result }
}
} ~ contentType(`application/json`) {
// user POSTed a JSON object
entity(as[MyCaseClass]) { data =>
complete { data.result }
}
}
}
最佳答案
由于 Spray marshalling 系统非常聪明,有一种非常优雅的方法可以实现这一点。代码 ( gist ) 说明了这一点:
case class User(name: String, no: Int)
// Json marshaller
object UnMarshalling extends DefaultJsonProtocol {
val jsonUser = jsonFormat2(User)
val textUser = Unmarshaller[User](`text/plain`) {
case HttpEntity.NonEmpty(contentType, data) =>
val res = data.asString.drop(5).dropRight(1).split(',')
User(res(0),res(1).toInt)
}
implicit val userMarshal = Unmarshaller.oneOf(jsonUser, textUser)
}
class UnMarshalTest extends FunSpec with ScalatestRouteTest with Matchers {
import UnMarshalling._
// Marshals response according to the Accept header media type
val putOrder = path("user") {
put {
// Namespace clash with ScalaTestRoutes.entity
MarshallingDirectives.entity(as[User]) {
user =>
complete(s"no=${user.no}")
}
}
}
describe("Our route should") {
val json = """ {"name" : "bender", "no" : 1234} """
it("submit a json") {
Put("/user", HttpEntity(`application/json`,json)) ~> putOrder ~> check {
responseAs[String] should equal("no=1234")
}
}
it("Submit text") {
Put("/user", HttpEntity(`text/plain`,"""User(Zoidberg,322)""")) ~> putOrder ~> check {
responseAs[String] should equal("no=322")
}
}
}
}
关于scala - 基于请求内容类型的不同路由 Spray Routing 1.2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826317/
使用 Spray-io 构建我的第一个 servlet 非常简单。 但是 header 中引用的资源从未找到。 ...... 必须将这些资源放在哪个目录中,或者如何引导喷雾在那里查找? 简单的问题,但
我想了解 Spray 中的指令是如何工作的。 As per the documentation : The general anatomy of a directive is as follows:
对于 POST 和 PUT 请求,我使用以下语法: put { entity(as[CaseClass]) { entity => returnsOption(entity).map(r
我正在使用 marathon-lb 运行 DC/OS 1.7。 spray.io 1.3.3 向所有 marathon-lb/HAProxy 健康检查调用返回 400:请求具有相对 URI 并且缺少主
我正在使用 marathon-lb 运行 DC/OS 1.7。 spray.io 1.3.3 向所有 marathon-lb/HAProxy 健康检查调用返回 400:请求具有相对 URI 并且缺少主
我在我的喷雾 jar 服务器中使用以下路径(使用喷雾 1.2): path("my"/"path"){ get{ complete{ val buf:Array[Byte] =
我正在尝试重现 this或 this ,但我不断收到一个我无法修复的错误... 首先,这是我的依赖项: compile 'io.spray:spray-can_2.11:1.3.1' compile
我正在用 Spray 编写一个自定义指令,用于管理任何用户请求的速率限制。 我要一个 LimitManager某个地方将处理每个请求的自定义限制和规则。这个唯一需要的信息LimitManager是 u
我的服务的所有 API 调用都是 HTTP POST,参数在多部分正文中传递。目前我的身份验证如下所示 formField("token".as[String]) { token => auth
喷雾真的很容易,但我在理解路由方面遇到了问题。这就像一只狗有时会取骨头,但通常不会。我错过了什么? 有没有办法查看Spray尝试了哪些路线,以及为什么放弃某些路线?这将基本上解决这个问题。 logRe
如何在Spray-json中正确反序列化嵌套对象? import spray.json._ case class Person(name: String) case class
来自spray.io文档页面: color extract value of parameter “color” as String color.? extract optional value of
我使用 spray 和 akka actor 构建了一个 scala 应用程序。 我的问题是请求是同步的,服务器不能同时管理很多请求。 这是正常行为吗?我该怎么做才能避免这种情况? 这是我的启动代码:
我正在尝试从 Spray 提供大型临时文件。 HTTP 请求完成后,我需要删除这些文件。到目前为止,我找不到这样做的方法...... 我使用的代码类似于 this或者这个: res
Spray-json 依赖于范围内隐式 JsonWriter[T] 的存在调用toJson时在 T 的实例上. 假设我有几个具体子类型的特征,每个子类型都有一个 JsonWriter: trait B
我正在尝试从喷雾路由中的完整指令返回一个列表。 complete { List("hello") } 但是,我收到一个错误 - Expression of type List[String] do
我正在使用喷雾路由来构建一个简单的 HTTP 服务器。该服务器调用许多需要一段时间才能响应(秒)的服务。当并发请求数变得很大时,我们想拒绝请求。否则,大量并发请求会使系统陷入困境,对任何人都不利。 有
我是Spray-Json API的新手,并且试图解析Docker REST API的Json响应。 There是使用Spray-Json解析此Google Map Json响应的一个干净示例: {
我正在使用 Spray-json 将自定义对象列表编码(marshal)到 JSON 中。我有以下案例类及其 JsonProtocol。 case class ElementResponse(name
MyService.scala:33: could not find implicit value for parameter eh: spray.routing.ExceptionHandler 我
我是一名优秀的程序员,十分优秀!