reservation
是包含4个字段的资源。id
,dataCenter
,startDate
,endDate
我希望处理这两种类型的请求:
其中有一个带有dataCenters列表的正文
他们不发送正文(在这种情况下,我将对数据库中存在的所有dataCenters执行操作。)
没有身体:
PUT /reservation/123/end
DELETE /reservation/123
身体:
PUT /reservation/123/end
{
"dataCenters": ["AMS", "CLT"]
}
DELETE /reservation
{
"dataCenters": ["AMS", "CLT"]
}
服务器的问题是即使没有正文,也要求正文是有效的JSON(当正文为空时不是这种情况)。处理这个用例的最佳方法是什么?
答案 0 :(得分:0)
我找到了一个可能的解决方案,而不是一个干净的解决方案,但是有效。
对于PUT
Json
.fromJson[OptionalDatacenters](request.body.asJson.getOrElse(JsArray()))
.getOrElse(OptionalDatacenters(None))
.dataCenters
对于DELETE
Action.async(parse.raw) { request =>
val dataCenters =
request.body
.asBytes()
.map(
bytes =>
if (bytes.size > 1) Json.parse(bytes.toArray).as[OptionalDatacenters]
else OptionalDatacenters(None)
)
.getOrElse(OptionalDatacenters(None))
.dataCenters