我在 JSON 请求中绑定了层次结构的三个层次:
Group -> Zone -> Segment
(1) -> (n) -> (n)
在我的命令对象中,我有:
class GroupCommand {
Long id
Set zones
}
绑定 JSON 请求时,区域会正确绑定,我会得到一个 LinkedHashSet,我可以获取它的属性并与我的域对象一起使用。但是,当我开始迭代服务中的细分时:
groupCommand.zones.each { zone ->
zone.segments.each { segment ->
//Would like to get LinkedHashMap here also
//but get JSONArray
}
}
如上所述,理想情况下,我希望深度嵌套的 Segments 也绑定到 LinkedHashMap,但它绑定到 JSONArray。
关于如何将其绑定到 LinkedHashMap 的任何建议,因为我想避免在我的服务中操作 JSONArray 从而将我的服务与 JSON 格式耦合。
如果有一种方法可以使用 getter 在命令级别进行转换,我也完全赞成。
谢谢
编辑:
使用
List zones = org.apache.commons.collections.list.LazyList.decorate(new ArrayList(), new org.apache.commons.collections.functors.InstantiateFactory(ZoneCommand.class))
似乎可以工作,但底层对象仍然是 JSON 元素。然后我尝试使用:
List<RateZoneCommand> zones = org.apache.commons.collections.list.LazyList.decorate(new ArrayList(), new org.apache.commons.collections.functors.InstantiateFactory(ZoneCommand.class))
至少我得到一个错误,表明它试图转换:
Validation error: ... org.codehaus.groovy.grails.web.json.JSONArray to required type java.util.List for property zones; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org..JSONObject] to required type [ZoneCommand] for property zones[0]: no matching editors or conversion strategy found.