提问人:jadekim 提问时间:9/6/2023 最后编辑:jadekim 更新时间:9/6/2023 访问量:74
使用 ajax 将 formData 发送到 spring 服务器时如何添加对象列表
How to add list of objects when sending formData to a spring server with ajax
问:
objs 值在如下编写的代码中为 null。我尝试了各种方法,但结果是 objs 为 null。如何在FormData中添加对象列表?
在“网络”选项卡上检查有效负载时,objs 如下所示。
obj[0]: {"name":"n1", "age":10}
obj[1]: {"name":"n2", "age":20}
此外,当我检查 from 和 时,objs 的值如下。HttpServletRequest request
request.getParameterMap()
["{"name":"n1", "age":10}", "{"name":"n2", "age":20}"]
JavaScript的
$('#submit-button').click(
function () {
var objs = [{"name":"n1", "age":10}, {"name":"n2", "age":20}];
var formData = new FormData();
formData.append("title", $('#title').val());
formData.append("summary", $('#summary').val());
formData.append("content", $('#content').val());
for (var i=0; i < objs.length; i++) {
formData.append("objs[" + i + "]", JSON.stringify(objs[i])); //this is not working
//formData.append("objs", objs[i]); //this is not working
//formData.append("objs[" + i + "].name", objs[i].name); //this is not working
}
$.ajax({
url: "/example",
type: "POST",
data: formData,
enctype: "multipart/form-data",
contentType: false,
processData: false
});
}
)
Java Spring 中的 DTO
public record ExampleRequest(
@NotBlank
String title,
@NotBlank
String summary,
@NotBlank
String content,
@NotNull
List<OBJ> objs,
){}
public record OBJ(
String name,
Integer age
) {}
控制器
@PostMapping("/example")
public String example(
@Validated @ModelAttribute ExampleRequest exampleRequest, //request.objs is null...
BindingResult bindingResult
) {}
我希望在 javascript 中处于春季状态。帮帮我。。。var objs = [{"name":"n1", "age":10}, {"name":"n2", "age":20}];
List<OBJ>
答:
0赞
Yusuf Khan
9/6/2023
#1
您在 Spring 后端的请求需要一个“OBJ”列表。取而代之的是,您分别提供了多个“OBJ”对象,这些对象将构造以下内容:
- 键:“objs[0]”,值:“{”name“:”n1“, ”age“:10}
- 键:“objs[1]”,值:“{”name“:”n2“, ”age“:20}
相反,您应该执行以下操作:
formData.append("objs", JSON.stringify(objs));
这将为您提供您想要的:
- 键:“objs”, 值: “[{”name“:”n1“, ”age“:10}, {”name“:”n2“, ”age“:20}];”
然后,Spring 在将参数中的数据映射到预期对象时,就会知道这是一个“OBJ”列表。
此外,您正在将 multipart/form-data 用于 enctype,它适用于基于文件的请求(如文件上传)。这应该是“application/json”。
评论
0赞
jadekim
9/6/2023
感谢您的评论。正如你所说,我能够获得关键,价值。 但是 objs 在控制器上仍然有一个 null 值。key: "objs", value: "[{"name":"n1", "age":10}, {"name":"n2", "age":20}];"
0赞
Yusuf Khan
9/6/2023
我现在才注意到这一点 - 您正在使用 multipart/form-data 是您的主要问题。你不应该使用它。multipart/form-data 用于基于文件的请求(如上传)。您应该使用 application/json。
评论