2

我认为你们中的一个非常聪明的 scala 人可能能够解释以下问题。

以下服务始终返回 400(客户端发送的请求在语法上不正确 ()。) - springmvc 中不太有用的错误之一,但通常在未正确指定参数时发生。但是,如果我删除在 None 上进行映射的行,它会起作用。此外,如果我创建一个引用参数的本地 val 然后映射它,它也可以工作。

@RequestMapping(value = Array("/willfail/{param}/"))  
def willFail(@PathVariable param:String):String={
    println("This line never even gets executed.")

    //Remove following line and it works.
    None.map(_ == param )

    //Whatever..
    "somepage"
}

这有点尴尬,因为我把大家踢和尖叫拖到 scala 上,这是我对此感到有点内疚的第一个案例。

4

1 回答 1

1

正如Biju Kunjummen 正确指出的那样,它与从调试信息中重构参数名称有关。

None.map(_ == param ) scalac由于某些原因存在将不同的参数名称(param$1而不是param)写入调试信息(您可以使用 进行检查javap -c -l),因此 Spring MVC 无法将参数与路径变量相关联。

作为一种解决方法,您可以显式指定参数名称 ( @PathVariable("param")),如果在没有调试信息的情况下编译,它也可以使您的程序正常工作。

于 2012-08-23T22:57:17.913 回答