Akka-http并在POST期间处理空体

时间:2016-05-25 04:34:07

标签: scala akka-http

假设我正在处理帖子消息。

Content-Type可以是application / xml或application / json。我可以很好地解组XML和JSON文档。

但是,我想处理一个用空体调用POST方法的情况(内容类型可能仍然是xml或json,但文档本身是一个空字符串)。这适用于各种日志记录和分析目的。现在,该方法失败了,因为我的任何一个解散者都无法处理空体。

如何为此案件编写unmarshaller?或者unmarshaller可以处理一个空体?

在我的代码中,我有以下内容。我需要更多的marshallers吗?

  implicit def myUnmarshaller(implicit mat: Materializer): FromEntityUnmarshaller[MyClass] =
    Unmarshaller.firstOf[HttpEntity, MyClass](
      /* myNullBodyMarshaller, */ // do I need this?
      myJsonUnmarshaller, 
      myXmlUnmarshaller
    )

或者我可以修改现有的吗?例如,这个?

def myJsonUnmarshaller(implicit mat: Materializer): FromEntityUnmarshaller[MyClass] =
    Unmarshaller.byteStringUnmarshaller.forContentTypes(MediaTypes.`application/json`).mapWithCharset { (data, charset) ⇒
      val input: String = if (charset == HttpCharsets.`UTF-8`) data.utf8String else data.decodeString(charset.nioCharset.name)
      val tmp = input.parseJson.convertTo[MyClass]
      MyClass(tmp.A, tmp.B)
    }

0 个答案:

没有答案