Ваш JSON не имеет узла car
, поэтому вы не можете использовать его как часть вашей @JsonProperty
аннотации. Вообще говоря, вам нужно только указать отдельные имена узлов, а не полные пути, так как они оцениваются относительно узла root. Там, где у вас есть вложенные структуры JSON, принято заключать их в отдельный класс, поэтому вам не нужно указывать полные пути.
class Car {
@JsonProperty("color")
private String color;
@JsonProperty("type")
private String type;
@JsonProperty("modeltype")
private String modelType;
// The rest of the class
}
Следует выполнить трюк для JSON, который вы предоставили. Если свойство отсутствует в источнике JSON, тогда его значение будет просто null
в вашем Java объекте.
Ваш второй образец JSON завершится неудачно, потому что объект Java, которым Джексон является попытка разархивировать JSON в не объявляет свойство с именем "modeltype"
, а поведение по умолчанию - сбой для неизвестных свойств. Это конкретное поведение можно подавить, добавив следующую аннотацию на уровне класса:
@JsonIgnoreProperties(ignoreUnknown = true)
Однако это заставит Джексона полностью игнорировать любое свойство, для которого нет сопоставленного поля, поэтому вы потеряете все данные, связанные с неизвестные свойства.