在 Play Framework(2.6)中;我目前是来自MongoDB的案例类的automatically mapping JSON(使用 ReactiveMongo 0.12 和 JSON Collections )。我已下载数据集(here)并将其作为集合导入 MongoDB ,以便进行与地理空间查询相关的一些测试。但是其中一个字段称为" type " (快速浏览一下,您会看到此here)因此我遇到了问题,因为这是 Scala 中的关键字。否则这就是我要写的:
case class Geometry(coordinates: List, type: String)
case class Neighborhood(_id: Option[BSONObjectID], geometry: Geometry, name: String)
添加(感谢@MarioGalic);将 scala关键字声明为类参数名称似乎是用反引号完成的,但我仍然在播放模板中输出这些问题。因此,如果我循环遍历每个文档,我可能会写这个(这会出错)。
@for(ngh <- neighborhoods){
<tr>
...
<td>@ngh.name</td>
<td>@ngh.geometry.`type`</td>
...
</tr>
}
如果没有反引号,则无法在此处工作,并且在模板中无法识别反引号。我在this referenced question/answer on the subject中找不到任何其他格式,所以我仍然遇到问题。感谢
对不起,这显然是做什么的。在案例类模型中,只需定义一个具有不同名称的方法(来自&#34;类型&#34;在此示例中,但基本上任何关键字都会导致问题:
case class Geometry(coordinates: List, `type`: String) {
def getType = `type`
}
然后在模板中调用它:
@for(ngh <- neighborhoods){
<tr>
...
<td>@ngh.name</td>
<td>@ngh.geometry.getType</td>
...
</tr>
}
全部谢谢!
答案 0 :(得分:1)
您可以使用backticks将字段type
包装成如下:
case class Geometry(coordinates: List, `type`: String)
以下答案更详细地解释了反引号语法: Need clarification on Scala literal identifiers (backticks)
答案 1 :(得分:0)
只需将代码包装在花括号中,就像这样:
@{ngh.geometry.`type`}
,type
字段将在Play模板中正确呈现。无需创建getType
方法。
您的完整工作代码将是:
@for(ngh <- neighborhoods){
<tr>
...
<td>@ngh.name</td>
<td>@{ngh.geometry.`type`}</td>
...
</tr>
}