杰克逊忽略了塞特尔方法

时间:2018-01-31 14:51:52

标签: java spring-web jackson2

我有以下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}来解决此问题,但我需要知道这里发生了什么。

0 个答案:

没有答案