使用ajax将formData发送到spring服务器时如何添加对象列表

问题描述 投票:0回答:1

下面编写的代码中,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}"]

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 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>
。帮助我...

java ajax spring form-data
1个回答
0
投票

您对 Spring 后端的请求需要一个“OBJ”列表。相反,您分别给出多个“OBJ”对象来构造这个:

  • 键:“objs[0]”,值:“{“姓名”:“n1”,“年龄”:10}
  • 键:“objs[1]”,值:“{“姓名”:“n2”,“年龄”:20}

相反,你应该这样做:

formData.append("objs", JSON.stringify(objs));

这会给你你想要的:

  • key: "objs", value: "[{"name":"n1", "age":10}, {"name":"n2", "age":20}];"

Spring 在将 params 中的数据映射到期望的对象时就会知道这是一个“OBJ”列表。

© www.soinside.com 2019 - 2024. All rights reserved.