gpt4 book ai didi

java - 如何将@RequestParam 绑定(bind)到spring MVC 中的对象?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:45 26 4
gpt4 key购买 nike

我想通过 AJAX 发出 POST 请求,我还想将整个类对象绑定(bind)到该请求,我想接收带有 @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

}

在 Controller 中

public String content(@RequestParam RestDTO restDTO){...}

我应该怎么做才能运行这段代码?

从 ajax 发送数据时我应该更改什么?

我是否需要在服务器上进行更改以接收带有 @requestParam 注释的 RestDto 对象?

最佳答案

你不能,因为 @RequestParam 只是表明,one 方法的参数应该绑定(bind)到 one 网络请求的参数。它不能映射到对象。要使用 @RequestParam,您应该更改 ajax 请求:

var restDTO{
id: 3,
name: "hello"
}

$.ajax({
url: url,
type: 'POST',
data: restDTO,
success: function(data){
....
}
});

JQuery 将发送请求作为 application/x-www-form-urlencoded 并将数据自动处理为参数。您 Controller 的方法应如下所示:

@RequestMapping("/url")
public String content(@RequestParam Long id, @RequestParam String name){...}

要自动将参数映射到对象,您可以使用 @ModelAttribute 注释:

@RequestMapping("/url")
public String content(@ModelAttribute RestDTO restDTO){...}

在这种情况下,javascript 映射中的名称应与 RestDTO 中的属性名称相匹配。

通常,@ModelAttribute@RequestBody 的创建目的相同:用于将数据从请求绑定(bind)到方法(无论是原始类型的对象)。

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

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

我个人更喜欢 @RequestBody 和 json。

关于java - 如何将@RequestParam 绑定(bind)到spring MVC 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36003330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com