Джексон игнорирует XmlAccessorType.NONE

69
4

Мой класс pojo аннотируется с помощью XmlAccessorType.NONE.

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Human {

@XmlElement(name="name")
private String name;

private int age

}

JSON, который пытается прочитать, содержит как имя свойства, так и возраст. Если я аннотирую класс с помощью JsonIgnoreProperties (ignoreUnknown = true), все работает. Однако, если я попытаюсь использовать аннотацию XmlAccessorType (XmlAccessType.NONE), джексон выдает исключение неизвестного свойства.

Я попытался добавить JaxbAnnotationIntrospector в objectmapper, но это не помогло mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector());

спросил(а) 2016-01-14T16:11:00+03:00 4 года, 8 месяцев назад
1
Решение
58

Я не понимаю, почему XmlAccessorType(XmlAccessType.NONE) будет иметь здесь значение, Это повлияет на обнаружение доступных свойств (без автоматического обнаружения), но НЕ что делать с свойствами JSON/XML, для которых нет свойства Bean.

Разница здесь, вероятно, больше из-за различий между значениями по умолчанию для JAXB и Jackson: по умолчанию JAXB молча игнорирует все, что он не распознает. По умолчанию Джексон выдает исключение, когда он ничего не узнает.

Если вы хотите, вы можете настроить ObjectMapper чтобы игнорировать эти проблемы по умолчанию:

napper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

так что поведение аналогично поведению JAXB.

ответил(а) 2016-01-15T04:38:00+03:00 4 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема