我有以下POST正文示例:
{ "Id": "123abxy"}
{ "customUrl": "http://www.whiskey.com","Id": "123abxy"}
{ "size": "88", "customUrl": "http://www.whiskey.com","Id": "123abxy"}
以下终点:
case class aType(
customUrl: Option[String],
Id:Option[String],
size:Option[String]
)
@ResponseBody
def addCompany(
@RequestBody a: aType,
@ModelAttribute("action-context") actionContext: ActionContext
): DeferredResult[Created] = Action[Created]
{
val customUrl = {
a.customUrl
}
val size = {
if (a.size == None) {None}
else Option(a.size.get.toLong)
}
val Id = {
a.Id
}
val handle = register(
customUrl,
Id,
size
).run()
}.runForSpring[Nothing](executors, actionContext)
此外:
def register(
customUrl: Option[String],
Id: Option[String],
size: Option[Long]
)
鉴于上述情况,我想知道处理size
和customUrl
未传递到POST Body的情况的正确方法。
在这种情况下,由于size
可以是值(Long
)或null
,customUrl
可以是String
或{{1我认为处理这个问题的正确数据类型分别是null
和Option[String]
Option[Long]
和customUrl
。
我的问题是如何更改size
子句以处理上述null或if-else
/ String
的方案,以便我可以将有效变量传递到Long
功能?
干杯,
答案 0 :(得分:0)
如果register
函数接收大小并将customURL作为选项,那么问题是什么?
我会做这样的事情:
@ResponseBody
def addCompany(
@RequestBody a: aType,
@ModelAttribute("action-context") actionContext: ActionContext
): DeferredResult[Created] = Action[Created]
{
val handle = register(a.customUrl,a.id,a.size).run()
}.runForSpring[Nothing](executors, actionContext)
如果未定义None
,则需要返回size
:
@ResponseBody
def addCompany(
@RequestBody a: aType,
@ModelAttribute("action-context") actionContext: ActionContext
): DeferredResult[Created] = Action[Created]
{
val sizeOpt = a.size
val handle =sizeOpt.map { size =>
register(a.customUrl,a.id,Some(size)).run()
}
}.runForSpring[Nothing](executors, actionContext)
但更好的是,你的寄存器函数不是指望Option
,而只处理原始类型。然后你只需要映射3个可选值(我建议用于理解):
for {
size <- a.size
url <- a.customUrl
id <- a.id
} yield register(url, id, size).run()
寄存器定义为:
def register(
customUrl:String,
Id: String,
size: Long
)