编辑:经过重新设计后,我不再遇到这个问题了。我应该关闭这个问题吗?
我的门户网站使用骨干网在浏览器中构建GUI,并在服务器上使用Java Spring MVC来提供和接收数据。
在一个实例中,我们在浏览器中显示可以编辑的人员列表。该列表是从服务器发送的,如JSON:
[{id: 1, title: 'Städare', details: {name: 'Stefan', phone: '123456'}},
{id: 2, title: 'Sotare', details: {name: 'Arne', phone: '234567'}}]
"详情"每个用户的部分包含可以编辑的数据," id"骨干需要," title"是一个本地化字段,仅用于演示。
我的问题是,当用户保存此数据中的更改时,我想制作一个这样的控制器方法:
@RequestMappin(value = "/userlist/user/{id}", method = PUT)
public void saveUser(@Valid @RequestBody UserDetails details, @PathVariable("id") String id) {
(...)
}
在这里,我希望细节对应于"详细信息"上面列出的JSON模型中的部分。但是这不起作用,因为当我从上面的列表中取得模型的骨干中的model.save()时,它将发送包含" title"和"详细信息",它没有映射到看起来像这样的UserDetails类:
public class UserDetails {
private String name;
private String phone;
(...)
}
我的问题是:有没有办法让我的Spring MVC控制器方法接收"详细信息"参数中请求体的一部分(我希望它作为参数,因为我在输入方法之前使用@Valid表示法对数据运行验证),或者骨干只将模型的详细信息部分发送到服务器。虽然没有做一些感觉像黑客的事情。
显而易见的替代方法是编写一个包装类,模仿"细节"周围的子结构,并在PUT控制器中使用它。我不想这样做,部分是因为它是一堆不必要的代码,部分是因为我们在为嵌套类运行验证器时遇到了问题。
答案 0 :(得分:0)
在主干方面,它应该是直接的,并且很容易发送json的用户详细信息部分。文档还说,您也可以发送要在服务器上更改的模型部分。
文档:http://backbonejs.org/#Model-save
因此,您可以发送用户详细信息进行保存,如下所示:
model.save(
{name: 'Stefan', phone: '123456'},
{
success:function(model, response, options){},
error:function(model, response, options){}
}
);
在这种情况下,保存调用会将idAttribute
附加到url
并发送属性哈希,在您的情况下是用户详细信息。