如何在 Spring MVC 中将 @RequestParam 绑定到对象?

2023-11-26

我想通过 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发送数据时应该改变什么?

我是否需要在服务器上进行更改才能接收 RestDto 对象@requestParam注解?


你不能,因为@RequestParam只是表明,one方法的参数应该绑定到oneWeb 请求的参数。它无法映射到对象。用来@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 and @RequestBody创建的目的相同:用于将请求中的数据绑定到方法(无论是原始类型的对象)。

我认为,那@ModelAttribute当您使用 html 表单和普通对象时,会更方便。已经准备好使用 Spring 功能,例如modelAttribute and path.

轮到时,@RequestBody当您需要手动控制数据时更加灵活。此外,当您处理复杂的对象时,它会更方便。

我个人更喜欢@RequestBody和 json。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Spring MVC 中将 @RequestParam 绑定到对象? 的相关文章

随机推荐