我想通过 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 许可协议
你不能,因为
@RequestParam
只是表明, 一个 方法的参数应该绑定到 一个 网络请求的参数。它不能映射到对象。使用@RequestParam
你应该改变ajax请求:JQuery 将发送请求
application/x-www-form-urlencoded
并将自动处理数据到参数。您控制器的方法应如下所示:对于自动将参数映射到对象,您可以使用
@ModelAttribute
注释:在这种情况下,javascript 映射中的名称应与
RestDTO
中的属性名称相匹配。一般来说,
@ModelAttribute
和@RequestBody
创建的目的相同:用于将数据从请求绑定到方法(无论是原始类型的对象)。我认为
@ModelAttribute
在您使用 html 表单和普通对象时更方便。准备好使用 Spring 功能,如modelAttribute
和path
。反过来,
@RequestBody
更灵活,当您需要手动控制数据时。此外,当您处理复杂的对象时,它也更方便。我个人更喜欢
@RequestBody
和 json。