1

我需要帮助。我正在尝试使用 CURL 进行 HTTP POST 并使用喷雾路由和参数

curl -v -o UAT.json "http://*****/pvdtest1/14-JUL-2014?enriched=true" -H  "Content-Type: application/json" -d '{ "text": "Test", "username": "User" }'

我的 JSON Post 是可选的,这意味着我也可以将请求作为

curl -v -o UAT.json "http://*****/pvdtest1/14-JUL-2014?enriched=true"

如果我在路由中使用

 path("pvdtest1" / Segment) { (cobDate) =>
          (parameters('enriched.as[Boolean] ? false) & post) {
            (enriched) => {
              println(" inside post")
              entity(as[Message]) { message =>
                println(" inside post 1")
                logger.debug("User '{}' has posted '{}'", message.username, message.text)

上面的代码工作文件

但是如果我尝试使 POST 可选,它不起作用

 path("pvdtest1" / Segment) { (cobDate) =>
          (parameters('enriched.as[Boolean] ? false) | post) {
            (enriched) => {
              println(" inside post")
              entity(as[Message]) { message =>
                println(" inside post 1")
                logger.debug("User '{}' has posted '{}'", message.username, message.text)



Error:(166, 56) type mismatch;
 found   : spray.routing.Directive0
    (which expands to)  spray.routing.Directive[shapeless.HNil]
 required: spray.routing.Directive[shapeless.HList]
Note: shapeless.HNil <: shapeless.HList, but class Directive is invariant in type L.
You may wish to define L as +L instead. (SLS 4.5)
          (parameters('enriched.as[Boolean] ? false) | post) {

有人可以帮忙解决问题吗?

4

1 回答 1

2

问题是|Spray中的方法要求双方是同一种类。parameters提供一个布尔值,post没有值。该&方法连接了两个指令,因此它们可能是不同的类型。

您可以将该行更改为以下内容以允许获取和发布,并捕获丰富的参数:

(get | post) { (parameters('enriched.as[Boolean] ? false)

于 2014-10-29T16:09:43.803 回答