如何将@RequestParam 绑定到spring MVC 中的对象?

新手上路,请多包涵

我想通过 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 对象?

原文由 user3029929 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 943
1 个回答

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

我认为 @ModelAttribute 在您使用 html 表单和普通对象时更方便。准备好使用 Spring 功能,如 modelAttributepath

反过来, @RequestBody 更灵活,当您需要手动控制数据时。此外,当您处理复杂的对象时,它也更方便。

我个人更喜欢 @RequestBody 和 json。

原文由 Ken Bekov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题