0

我有一个带有地图列表的 Grails 命令对象。映射键旨在成为数字域对象 ID。

class MyCommand {
  def grid = [].withDefault { [:] }
}

由于动态列表扩展,与列表/地图的数据绑定通常可以正常工作。

但是,在 POST 中,映射键被绑定为字符串,我希望它们是 Long,就像最初填充表单时一样。我想要foo[123]在我的地图中,而不是foo['123'].

[]或者,如果操作员在给定数字 ID 键查找的情况下找到正确的值,我会很满意。换句话说,如果我可以foo[123]返回与 相同的值foo['123'],那也可以。

有什么办法可以让它按照我想要的方式工作吗?也许强烈键入地图?

还是更好的方法?

4

1 回答 1

0

您可以inject将属性放入映射以将String键转换为Long. 例如:

def myMap = [:] << ['1': "name"] << ['Test': "bobo"]
def result = myMap.inject([:]){map, v ->
   def newKey = v.key.isNumber() ? v.key.toLong() : v.key
   map[newKey] = v.value
   map
}

assert myMap['1'] == 'name'
assert result[1L] == 'name'
assert result['Test'] == 'bobo'
于 2013-05-06T16:24:47.283 回答