Grails数据绑定到带有映射的命令对象-将键转换为数字

Grails数据绑定到带有映射的命令对象-将键转换为数字,grails,data-binding,groovy,Grails,Data Binding,Groovy,我有一个Grails命令对象和一个映射列表。映射键应为数字域对象ID class MyCommand { def grid = [].withDefault { [:] } } 由于动态列表扩展,与列表/映射的数据绑定通常正常工作 然而,在文章中,映射键被绑定为字符串,我希望它们是长的,就像最初填充表单时一样。我想在我的地图中找到foo[123],而不是foo['123'] 或者,如果[]运算符在给定要查找的数字ID键的情况下找到正确的值,我会感到满意。换句话说,如果我能让foo[123]

我有一个Grails命令对象和一个映射列表。映射键应为数字域对象ID

class MyCommand {
  def grid = [].withDefault { [:] }
}
由于动态列表扩展,与列表/映射的数据绑定通常正常工作

然而,在文章中,映射键被绑定为字符串,我希望它们是长的,就像最初填充表单时一样。我想在我的地图中找到
foo[123]
,而不是
foo['123']

或者,如果
[]
运算符在给定要查找的数字ID键的情况下找到正确的值,我会感到满意。换句话说,如果我能让
foo[123]
返回与
foo['123']
相同的值,那也行

有没有办法让它按我想的方式工作?也许你可以打地图


或者更好的方法?

您可以
属性注入映射,以将
字符串
键转换为
。例如:

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'
def myMap=[:]