Spring Boot 从formdata中的javascript发送数据时,未将值分配给dto类中的嵌套类字段

dfddblmv  于 2023-01-17  发布在  Spring
关注(0)|答案(1)|浏览(97)

使用formdata从javascript发送数据时,值未正确Map
我得发一份文件和一份电话号码清单
javascript文件

let fdata = new FormData();
fdata.append("postalCode", $("#c-postalCode").val());
fdata.append("dob", $("#c-dob").val());
fdata.append("contactImage", $("#c-contactimg")[0].files[0]);

fdata.append("phoneNos", [{id:"1",phoneNo:"12345"}]);

fetch("/cm/save/contact/details", {
body: fdata,
method: "POST"
}).then((response) => { //Somecode})

静止控制器类
在使用ModelAttributeMap来自javascript的数据的方法中

@PostMapping("/save/contact/details")
    public void saveContactDetails(@ModelAttribute ContactDetailsDto contactDetailsDto) {
        System.out.println(contactDetailsDto);
    }

ContactDetailsDto.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ContactDetailsDto {

    //Somecode

    private MultipartFile contactImage;

    @NotBlank
    private List<PhoneNumberDto> phoneNos = new ArrayList<>();

}

PhoneNumberDto.java

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PhoneNumberDto {

    private Integer id;
    private String phoneNo;

    public PhoneNumberDto(String phoneNo) {
        super();
        this.phoneNo = phoneNo;
    }

}

但当打印数据id字段为空且phoneNo显示对象时

ContactDetailsDto(id=null, name=asd, email=, contactImage=org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile@2dc05cd7, address1=, address2=, postalCode=null, country=101, state=4030, city=57709, dob=null, phoneNos=[PhoneNumberDto(id=null, phoneNo=[object Object])])

我已经尝试了几种方法,比如创建不同的参数化构造函数,从javascript发送不同类型/形式的数据
如何将数据与嵌套了POJO类的字段精确Map

xtfmy6hx

xtfmy6hx1#

查看FormData#append文档
这里描述了第二个论点:
字段的值。可以是字符串或Blob(包括File等子类)。如果未指定任何一个值,则该值将转换为字符串。
这意味着您没有正确设置FormData-它不允许将数组或复杂对象作为值传递。
有人已经描述了这个问题的解决方案in this answer

相关问题