繁体   English   中英

将@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数

[英]Getting part of the @ResponseBody as an argument between backbone and a Spring MVC controller

编辑:重新设计后,我不再有这个问题。 我应该关闭这个问题还是什么?

我的Web门户使用主干在浏览器中构造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”和“ details”的大结构,该结构不会映射到UserDetails看起来像这样的类:

public class UserDetails {
    private String name;
    private String phone;
(...)
}

我的问题是:有没有一种方法可以让我的Spring MVC控制器方法在参数中接收请求主体的“详细信息”部分(我希望将其作为参数,因为在使用@Valid表示法对数据进行验证之前,输入方法),或者让骨干仅将模型的详细信息部分发送到服务器。 虽然没有做一些骇人听闻的事情。

显而易见的替代方法是编写一个包装程序类,以模仿“详细信息”周围的子结构,然后在PUT控制器中使用该包装器类。 我宁愿不这样做,部分是因为这是一堆不必要的代码,部分是因为我们在为嵌套类运行验证器时遇到问题。

在主干方面,直接发送json的用户详细信息部分应该很简单。 该文档还说,您也可以只将要更改的模型部分发送到服务器上。

文件: http//backbonejs.org/#Model-save

因此,您可以仅发送用户详细信息进行保存,如下所示:

model.save(
    {name: 'Stefan', phone: '123456'},
    {
     success:function(model, response, options){},
     error:function(model, response, options){}
    }
);

在这种情况下,保存调用会将idAttribute附加到url并发送属性哈希(在您的情况下为用户详细信息)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM