The reason for the JsonProperty in Customer was that the json mapper used getter method names for the field name mapping. The getter for the customer name returns CustomerName object so it cannot be used by the mapper. The annotation also needs to be used for the boolean fields since the getters begin with 'is' and not 'get'.