下面编写的代码中,objs 值为 null。我尝试了各种方法,但结果 objs 为空。如何在FormData中添加对象列表??
在Network选项卡上检查payload时,objs如下。
obj[0]: {"name":"n1", "age":10}
obj[1]: {"name":"n2", "age":20}
另外,当我从
HttpServletRequest request
和request.getParameterMap()
检查时,objs的值如下。
["{"name":"n1", "age":10}", "{"name":"n2", "age":20}"]
$('#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
});
}
)
public record request(
@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 Request request, //request.objs is null...
BindingResult bindingResult
) {}
我希望javascript中的
var objs = [{"name":"n1", "age":10}, {"name":"n2", "age":20}];
在春天成为List<OBJ>
。帮助我...
您对 Spring 后端的请求需要一个“OBJ”列表。相反,您分别给出多个“OBJ”对象来构造这个:
相反,你应该这样做:
formData.append("objs", JSON.stringify(objs));
这会给你你想要的:
Spring 在将 params 中的数据映射到期望的对象时就会知道这是一个“OBJ”列表。