如何将@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会更方便。 可以使用像modelAttributepath这样的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与否都无关紧要