感谢您抽出时间来阅读。我查看了 Stack Overflow 并没有看到类似的问题,但如果我错过了一个问题,我深表歉意。
所以我正在构建一个 RESTful API,以及一个用户界面,它是所述 REST API 的(第一个)消费者。
我需要创建一个对象。该对象的创建需要大量的配置。
我了解我需要使用的动词(POST - 我们不要争论这一点)和我需要拥有的 URL 路径。我的问题是关于如何配置参数。让我给你一个 JSON 格式的示例配置对象,以便不可知:
{
name: "foo",
barid:1,
features:[
{
id:1,
config: {
foo:bar,
fubar:baz
}
},
{
id:2,
config: {
foo:bar,
fubar:baz
}
},...
]
}
所以我想知道的是……发布 features 参数的正确方法是什么?我是否应该将“功能”设为 JSON 字符串并在服务器端对其进行反序列化?您是否遵循一些约定在 RESTful POST 中构建嵌套对象数组?其他开发人员将不得不使用它,我当然不希望人们必须手动构建 jQuery 对我的 JSON 对象所做的事情,它看起来像:
features[0][featureid]:2
features[0][configuration][min]:-64
features[0][configuration][max]:50
features[0][include]:true
features[1][featureid]:3
features[1][configuration][min]:0
features[1][configuration][max]:80.5
features[1][include]:true
我的 grails 应用程序不太喜欢这样 :)
感谢你的宝贵时间。
请您参考如下方法:
Grails 可以接受像 features[0].featured=2&features[0].configuration.min=-64 这样的参数。 ,但您必须在实际映射之前准备空结构和特征数组。这将是:
import org.apache.commons.collections.ListUtils
import org.apache.commons.collections.Factory
class DataCommand {
String name
List features = = ListUtils.lazyList([], {
new FeatureCommand(
configuration: new ConfigurationCommand()
)
} as Factory)
}
+
class FeatureCommand {
int featured
ConfigurationCommand configuration
}
class ConfigurationCommand {
int min
int max
}
lazyList按需创建列表元素。如果您确切知道功能的数量 - 您可以使用lazyList手动填充它。
顺便说一句,这也是将正文中的实际 JSON POST/PUT 到服务器而不是请求参数的好方法。例如,它是 BackboneJS 的默认方式。因此,您将能够自己解析传入的 JSON,映射到相同的命令(需要很少的配置)。




