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