我有一个简单的Spray场景,不能像我预期的那样工作。
我有一个喷涂服务器,可以将工作分配给不同的模块,然后返回他们的组合响应。
由于我不想限制模块响应,我选择Module的方法返回ToResponseMarshallable,因为我有需要返回普通String的模块。
模块签名可以是:
def moduleProcessing():ToResponseMarshallable = randomString()
我的“完整”块看起来与此类似:
complete {
val response1 = moduleProcessing()
val response2 = moduleProcessing()
Seq(response1,response2)
}
在前面的例子中,我希望得到:
[{ “someRandomString”},{ “anotherRandomString”}]
但我得到了:
[{},{}]
当然,如果我返回单个响应或者我将moduleProcessing返回类型的签名更改为任何Marshallable类型,它将按预期传播。
提前感谢您的帮助!
答案 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("{", ",", "}"))