Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala/Play框架:从POST请求/NoTouchElementException获取有效负载_Scala_Map_Playframework_Nosuchelementexception - Fatal编程技术网

Scala/Play框架:从POST请求/NoTouchElementException获取有效负载

Scala/Play框架:从POST请求/NoTouchElementException获取有效负载,scala,map,playframework,nosuchelementexception,Scala,Map,Playframework,Nosuchelementexception,我试图从第2.3场比赛中的一根柱子上得到有效载荷 所以我用这个表达 val name = request.body.asFormUrlEncoded.get("name").flatMap(_.headOption) 但当字段“name”不存在时,我遇到了麻烦。使用调试器,我可以看到request.body.asFormUrlEncoded的类型是Some(Map)还是ListMap?我不确定,在调试器中,这两个术语都会显示。当字段“name”存在时,一切正常,但如果字段“name”丢失,则抛

我试图从第2.3场比赛中的一根柱子上得到有效载荷

所以我用这个表达

val name = request.body.asFormUrlEncoded.get("name").flatMap(_.headOption)
但当字段“name”不存在时,我遇到了麻烦。使用调试器,我可以看到request.body.asFormUrlEncoded的类型是Some(Map)还是ListMap?我不确定,在调试器中,这两个术语都会显示。当字段“name”存在时,一切正常,但如果字段“name”丢失,则抛出NosTouchElementException

我可以看到,只有调用request.body.asFormUrlEncoded.get(“name”)才会返回ArrayBuffer。但如果“name”字段不存在,它不应该返回Some(ArrayBuffer)和None吗

那么,如果字段丢失,我可以如何查询字段的值而不生成异常呢

增加: 下面是AnyContentAsFormUrlEncoded的声明。所以这是一张地图。但是get on-Map应该返回一些或没有,但不能直接返回对象

case class AnyContentAsFormUrlEncoded(data: Map[String, Seq[String]]) extends AnyContent

您在此处遇到了Scala限制:

对.get函数的调用是在您的
选项[Map[String,Seq[String]]
上完成的,然后您使用
(“name”)
,它被翻译成
.apply(“name”)
。您实际上是在调用
映射
对象的
应用
,如果该键不在您的映射中,它会引发异常

要避免这种情况,您可以使用:

val name:Option[String]=request.body.asFormUrlEncoded.flatMap(m=>m.get(“name”).flatMap(u.headOption))

您在此处遇到了Scala限制:

对.get函数的调用是在您的
选项[Map[String,Seq[String]]
上完成的,然后您使用
(“name”)
,它被翻译成
.apply(“name”)
。您实际上是在调用
映射
对象的
应用
,如果该键不在您的映射中,它会引发异常

要避免这种情况,您可以使用:

val name:Option[String]=request.body.asFormUrlEncoded.flatMap(m=>m.get(“name”).flatMap(u.headOption))

您在此处遇到了Scala限制:

对.get函数的调用是在您的
选项[Map[String,Seq[String]]
上完成的,然后您使用
(“name”)
,它被翻译成
.apply(“name”)
。您实际上是在调用
映射
对象的
应用
,如果该键不在您的映射中,它会引发异常

要避免这种情况,您可以使用:

val name:Option[String]=request.body.asFormUrlEncoded.flatMap(m=>m.get(“name”).flatMap(u.headOption))

您在此处遇到了Scala限制:

对.get函数的调用是在您的
选项[Map[String,Seq[String]]
上完成的,然后您使用
(“name”)
,它被翻译成
.apply(“name”)
。您实际上是在调用
映射
对象的
应用
,如果该键不在您的映射中,它会引发异常

要避免这种情况,您可以使用:

val name:Option[String]=request.body.asFormUrlEncoded.flatMap(m=>m.get(“name”).flatMap(u.headOption))

为什么不能为该异常设置一个处理程序?知道该字段是否确实存在并让程序处理该情况(如果不存在)是一件非常好的事情。这不是问题所在。当然,我可以将其放在try-catch块中。但异常不只是第二好的解决方案吗。-我在REPL中玩过,如果有的话在地图上调用get(“xxx”),如果地图上没有xxx,它会返回None。否则我会得到Some(任何东西)。所以问题是,为什么FormUrlEncoded地图上的“get”不返回选项?在地图或ListMap上的“get”scala文档中,它说“get”返回一个选项。为什么你不能为该异常设置一个处理程序?知道该字段是否确实存在并使你的程序处理该情况(如果它不存在)是一件非常好的事情。这不是问题所在。当然我可以将其放入try-catch块中。但异常不只是第二个最好的解决方案吗。-我在REPL a中玩过如果我有一个映射,并在上面调用get(“xxx”),而映射中没有xxx,它会返回None。否则我会得到Some(任何)。所以问题是,为什么FormUrlEncoded映射上的“get”不返回选项?在Map或ListMap上的“get”的scala文档中,它说“get”返回一个选项。为什么你不能为该异常设置一个处理程序?知道该字段是否确实存在并使你的程序处理该情况(如果它不存在)是一件非常好的事情。这不是问题所在。当然我可以将其放入try-catch块中。但异常不只是第二个最好的解决方案吗。-我在REPL a中玩过如果我有一个映射,并在上面调用get(“xxx”),而映射中没有xxx,它会返回None。否则我会得到Some(任何)。所以问题是,为什么FormUrlEncoded映射上的“get”不返回选项?在Map或ListMap上的“get”的scala文档中,它说“get”返回一个选项。为什么你不能为该异常设置一个处理程序?知道该字段是否确实存在并使你的程序处理该情况(如果它不存在)是一件非常好的事情。这不是问题所在。当然我可以将其放入try-catch块中。但异常不只是第二个最好的解决方案吗。-我在REPL a中玩过nd如果我有一个映射并在上面调用get(“xxx”),而映射中没有xxx,它会返回一个None。否则我会得到一个Some(任何东西)。所以问题是,为什么FormUrlEncoded映射上的“get”不返回一个选项?在Map或ListMap上的“get”的scala文档中,它说“get”返回一个选项。使用双get.get(“name”)同样。如果你是scala新手,这真的很棘手。我认为双平面图更稳定,但在我的情况下,第一个get不会失败。什么是更有效的方法。使用get.get还是使用平面图(get)?我认为最好是安全的