我有以下Java bean:
public class Customer implements Serializable {
private Integer id;
private String name;
private Country country;
public void setId(Integer id) {
this.id=id;
}
public void setName(String n) {
this.name=n;
}
public void setCountry(Country c) {
this.country=c;
}
public void setCountryId(Integer id) {
this.country= new Country();
this.country.setId(id)
}
//...getters here
}
和
public class Country {
private Integer id;
private String code; //es, us, fr...
private void setId(Integer id) {
this.id=id;
}
//rest of setters and getters
}
我有以下方法:
@RequestMapping(value = "/customer/", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Customer> addSecondaryCustomer(@RequestBody Customer sc) {
this.customerService.addCustomer(sc);
return new ResponseEntity<>(sc,HttpStatus.OK);
}
使用Web开发工具,我可以看到服务器正在接收以下内容:
{
"name": "Pablo Test",
"countryId": 1
}
我可以看到填充了字段name
,但country
仍为null
。我试图在两个setter中设置一个断点,但是没有一个被调用,所以看起来对象映射器正在寻找属性,忽略了setter。 ¿为什么会这样?
我正在使用Jackson 2.9.0和Spring 4.2.13。它适用于旧版本的Spring(4.2.0)和Jackson(2.1.4)
PS:我知道我可以通过在我的AJAX请求中发送"country": { "id": 1}
来解决此问题,但我需要知道这里发生了什么。