我的目标是使用 form-data
设置 POJO 属性。我有一个通用的 POJO,当我使用 JSON
时它按预期工作,所以我不确定 form-data
的行为是否不同。
例如
POJO
public class Account_Info {
@JsonProperty("name")
private String firstName;
public String getFirstName() {
return firstName;
}
}
我想发送一个以“name”为关键字的表单数据。
let formData = new FormData();
formData.append("name", "a");
我的预期结果是:firstName
的 POJO 属性的值为 a
。
我的实际结果是:firstName
的 POJO 属性为 null。
我做了什么:
public class Account_InfoDto {
@JsonProperty("name")
private String firstName;
public String getFirstName() {
return firstName;
}
}
带有@RequestBody
@PostMapping(value = "/account_info")
public Account_InfoDto postAccount_Info(@RequestBody Account_InfoDto account_info) {
return account_info;
}
带有@ModelAttribute
@PostMapping(value = "/account_info", consumes = "multipart/form-data")
public Account_InfoDto postAccount_Info(@ModelAttribute Account_InfoDto account_info) {
return account_info;
}
带有JSON
{
"name": "a"
}
实际响应是:
{
"name": "a"
}
带有form-data
let formData = new FormData();
formData.append("name", "a");
实际结果是:
{
"name": null
}
答案 0 :(得分:-1)
@ModelAttribute
与 thymeleaf 等视图模板一起使用,@RequestBody
用于期望 json 有效负载,@JsonProperty
用于映射,formdata 不需要它。由于您通过 ajax 使用 formdata,因此您的有效负载上不需要任何注释。以下代码
@PostMapping(value = "/account_info")
public Account_InfoDto postAccount_Info(@RequestBody Account_InfoDto account_info) {
return account_info;
}
应该
@PostMapping(value = "/account_info")
public Account_InfoDto postAccount_Info(Account_InfoDto account_info) {
return account_info;
}
您的要求也应该是
let formData = new FormData();
formData.append("firstName", "a");
对于你的 DTO 还包括 setter 和 getter
public class Account_InfoDto {
@JsonProperty("name")
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName=firstName;
}
}