[英]Why @ModelAttribute does not work like @RequestBody?
我的目标是使用form-data
设置 POJO 属性。 我有一个通用的 POJO,当我使用JSON
时,它按预期工作,所以我不确定form-data
行为是否不同。
例如
POJO
public class Account_Info {
@JsonProperty("name")
private String firstName;
public String getFirstName() {
return firstName;
}
}
我希望发送以“名称”为键的表单数据。
let formData = new FormData();
formData.append("name", "a");
我的预期结果是: POJO 的firstName
属性的值为a
。
我的实际结果是:POJO 的firstName
属性是 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
}
@ModelAttribute
用于 thymeleaf 等视图模板,@ @RequestBody
在您期望 json 有效负载时使用, @JsonProperty
用于映射,formdata 不需要它。 由于您通过 ajax 使用表单数据,因此您不需要在有效负载上进行任何注释。 以下代码
@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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.