感谢您抽出时间来阅读。我查看了 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,映射到相同的命令(需要很少的配置)。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!