如何将@RequestParam绑定到spring MVC中的object?
我想通过AJAX发出一个POST请求,我还想将整个类对象绑定到请求,我希望用@requestParam
注释接收该请求。 我知道可以使用@requestBody
注释来完成,但我很想知道:我们可以使用@requestParam
注释吗?
一个Ajax代码:
var restDTO{ id: 3, name: "hello" } $.ajax({ url: url, type: 'POST', dataType: 'json', contentType: 'application/json', mimeType: 'application/json', data: JSON.stringify({RestDTO : restDTO}), success: function(data) { }
我有RestDTO
Class RestDTO { int id; String name; //getter and setter }
在控制器中
public String content(@RequestParam RestDTO restDTO){...}
我应该怎么做才能运行此代码?
从ajax发送数据我应该改变什么?
我是否需要在服务器上更改以接收带有@requestParam
注释的RestDto对象?
你不能,因为@RequestParam
只是表明, 一个方法的参数应该绑定到一个 web请求的参数。 它无法映射到对象。 要使用@RequestParam
您应该更改ajax请求:
var restDTO{ id: 3, name: "hello" } $.ajax({ url: url, type: 'POST', data: restDTO, success: function(data){ .... } });
JQuery将以application/x-www-form-urlencoded
发送请求,并自动处理数据到参数。 您的控制器方法应如下所示:
@RequestMapping("/url") public String content(@RequestParam Long id, @RequestParam String name){...}
要自动将参数映射到对象,可以使用@ModelAttribute
批注:
@RequestMapping("/url") public String content(@ModelAttribute RestDTO restDTO){...}
在这种情况下,javascript映射中的名称应与RestDTO
的属性名称匹配。
通常,为了相同的目的创建@ModelAttribute
和@RequestBody
:用于将数据从请求绑定到方法(是否为基本类型的对象)。
我认为,当你使用html-forms和普通对象时,@ @ModelAttribute
会更方便。 可以使用像modelAttribute
和path
这样的Springfunction。
反过来,@ @RequestBody
更灵活,当您需要手动控制数据时。 此外,当您使用复杂对象时,它更方便。
我个人更喜欢@RequestBody
和json。
如果您将数据作为经典请求参数发送,则可以通过简单地省略@RequestParam
来绑定到对象,
public String content(RestDTO restDTO){...}
如果您要发送json
,则必须使用@RequestBody
。
如果您坚持使用@RequestParam
,请注意您可以将多个值绑定到地图上,所以
public String content(@RequestParam Map restDTO){...}
来自@RequestParam
doc
如果方法参数是Map或MultiValueMap并且未指定参数名称,则使用所有请求参数名称和值填充map参数。
在spring web中你有这些注释:
RequestParam – 用于获取参数(/ path?name =)
PathVariable – 用于路径参数(/ path / {name})
RequestBody – 用于post / put / patch等主体
RequestHeader – 用于标题
所以你不能使用RequestParam用于post params,无论json与否都无关紧要