假设我正在处理帖子消息。
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)
}