喷射编组ToResponseMarshallable的集合

时间:2015-04-16 07:59:15

标签: scala collections response marshalling spray

我有一个简单的Spray场景,不能像我预期的那样工作。

我有一个喷涂服务器,可以将工作分配给不同的模块,然后返回他们的组合响应。

由于我不想限制模块响应,我选择Module的方法返回ToResponseMarshallable,因为我有需要返回普通String的模块。

模块签名可以是:

def moduleProcessing():ToResponseMarshallable = randomString()

我的“完整”块看起来与此类似:

complete {   

    val response1 = moduleProcessing()
    val response2 = moduleProcessing()
    Seq(response1,response2) 
}

在前面的例子中,我希望得到:

[{ “someRandomString”},{ “anotherRandomString”}]

但我得到了:

[{},{}]

当然,如果我返回单个响应或者我将moduleProcessing返回类型的签名更改为任何Marshallable类型,它将按预期传播。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为您的moduleProcessing方法直接返回ToResponseMarshallable[T],这很奇怪。 喷涂方式将使此方法返回T,并在您通过提供Marshaller[T]完成请求时具有范围T

最后,我不认为Marshaller.of[Seq[T]]built in marshaller in spray

这意味着您需要提供自己的Seq编组人员。这可以将seq中每个项的实际编组委托给隐式Marshaller[T]并连接结果。 Many builtin spray marshallers需要这样的隐式Marshaller[T]值。或者,如果您想要一个简单的Seq[T]字符串编组程序,请尝试以下操作:

implicit val CustomMarshaller = Marshaller.delegate[Seq[T], String](`text/html`)(_.mkString("{", ",", "}"))