JAXB: как заставить JAXB НЕ разархивировать пустую строку в 0 - PullRequest
7 голосов
/ 27 февраля 2011

У меня есть класс DTO с полем, таким как:

@XmlAttribute
@NotNull
private Integer number = null;

Я пытаюсь разобрать XML, такой как

...  number=""  ...

Мне нужно, чтобы числовое поле оставалось пустым,так что будет выдано исключение проверки.Вместо этого JAXB отменяет маршинг как 0. Как я могу заставить его вести себя правильно?

1 Ответ

9 голосов
/ 27 февраля 2011

Можно утверждать, что ведет себя правильно . number="" не означает ноль, это пустая строка, и JAXB должен попытаться обработать это правильно, и он решает, что самая близкая вещь к пустой строке для типа данных Integer равна нулю. Если вы хотите null, то атрибут number должен быть вообще опущен.

Если вы хотите настроить это поведение, вам нужно написать подкласс javax.xml.bind.annotation.adapters.XmlAdapter, который может обрабатывать преобразование между необработанным String и boundtype (то есть между String и Integer) так, как вам нужно. Затем вы подключаете этот адаптер, пометив поле с помощью @XmlJavaTypeAdapter.

...