Код: Выделить всё
public class Person extends BaseClass {
@JsonProperty("id")
private String id;
@JsonProperty("Email")
private Email email;
@JsonProperty("Name")
private PersonNm name;
private EndDt endDt;
// Getters and setters for all of the above
}
< /code>
Как вы можете видеть, у меня есть три свойства, отмеченные JsonProperty (а сети и геттеры отмечены как Jsonsetter и Jsongetter соответственно), но у меня есть дополнительное свойство, «Enddt». Это свойство никогда не появится в JSON, так как оно будет использовано позже. Тем не менее, он все еще имеет два конструктора: < /p>
public void setEndDt(Date val) {
if (endDt == null)
endDt = new EndDt();
endDt.setValue(val);
}
public void setEndDt(EndDt val) {
this.endDt = endDt;
}
< /code>
Следующий JSON отправляется в: < /p>
"Person": {
"id": "1",
"Email": {
"value": "[email protected]"
},
"Name": {
"value": "Bob Smith"
}
}
< /code>
Опять же, Enddt нет вообще. Но я все еще получаю исключение com.fasterxml.jackson.databind.exc.invaliddefinitionexception: конфликтующие определения сеттера для собственности "enddt": com.program.company.person#setenddt (com.program.company.endt) com.program.company.person#setenddt (java.util.date)
Я знаю, что я мог бы просто использовать jsonignore, но во многих классах есть несколько свойств, и было бы гораздо проще, чтобы Deserializer проигнорировал все, что не отмечает как «JSonProperty». У меня настроен мой объект, настроенный как таковой: < /p>
Код: Выделить всё
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.disable(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE);
mapper.disable(MapperFeature.AUTO_DETECT_SETTERS,
MapperFeature.AUTO_DETECT_FIELDS,
MapperFeature.AUTO_DETECT_CREATORS,
MapperFeature.AUTO_DETECT_GETTERS,
MapperFeature.AUTO_DETECT_IS_GETTERS);
Подробнее здесь: https://stackoverflow.com/questions/796 ... properties