У меня проблемы с разборкой JSon с помощью JAXB MOXy.
Ниже приведен JSON, который я хочу проанализировать:
{
"accounts": [{
"description": "A",
"balance": 1000,
"balanceAvailable": 1000
},
{
"description": "B",
"balance": 1001,
"balanceAvailable": 1001
},
{
"description": "C",
"balance": 1002,
"balanceAvailable": 1002
}],
"cardPermissions": null,
"totalBalanceAvailable": 1046.19
}
Проблема здесь с полем «cardPermissions».
Я пытаюсь демаршалировать объект, у которого нет поля «cardPermissions» (без аннотации @XmlElement и атрибута класса).
JAXB выдает исключение NullPointerException при демаршалинге этой строки, потому что это:
"cardPermissions": null
и не:
"cardPermissions": "null"
Чтобы принять нулевое значение, мне пришлось добавить в свой POJO поле cardPermissions (с аннотацией @XmlElement).
Выполняя это, также без геттеров и сеттеров, JAXB может правильно демаршалировать предоставленный JSON.
null и «null» - это совершенно разные вещи, но я не хочу включать это поле в свой POJO, и я должен игнорировать эти нулевые значения.
РЕДАКТИРОВАТЬ
Если я включу корневой элемент («customerInfo») следующим образом:
{
"customerInfo": {
"accounts": [{
"description": "B",
"balance": 1000,
"balanceAvailable": 1000
},
{
"description": "C",
"balance": 1001,
"balanceAvailable": 1001
},
{
"description": "D",
"balance": 1002,
"balanceAvailable": 1002
}],
"cardPermissions": null,
"totalBalanceAvailable": 1046.19
}
}
JSON анализируется правильно, но я не хочу включать root, когда я демаршалю json.
Это мой POJO:
@XmlRootElement(name = "customerInfo")
@XmlAccessorType(XmlAccessType.FIELD)
public class CustomerInfo {
@XmlElement(name = "name")
private String firstName;
@XmlElement(name = "surname")
private String lastName;
@XmlElement
private String customerId;
@XmlElement
private String email;
@XmlElement
private String cardPermissions; //This field has no getter and setter. I need it in order to parse correctly the JSON without the root node "customerInfo"
@XmlElement
private List<Account> accounts;
public CustomerInfo() {
}
public CustomerInfo(String firstName, String lastName, String emailAddress) {
this.firstName = firstName;
this.lastName = lastName;
this.email = emailAddress;
}
public String getFullName() {
return firstName + " " + lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<Account> getAccounts() {
return accounts;
}
public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
}




У вас есть два варианта:
required на false в аннотации @XmlElementname в аннотации @XmlElement всех других полей, а затем удалите ненужное поле. При этом поле будет проигнорировано.Для получения дополнительных и хороших подробностей перейдите к этому старому Почта.
Разместите свой POJO для получения более подробной информации.
Ваш файл json действителен, и ваше pojo тоже. Вместо конструктора с параметрами надо убрать. Вы делаете правильно, устанавливая корневой элемент. Почему вы хотите удалить корневой элемент?
Потому что вызываемая мной веб-служба возвращает такой ответ, и я не могу его изменить.
Вы неправильно поняли то, что вы хотите. Не могли бы вы четко объяснить, что вы пытаетесь сделать? Я до сих пор не могу понять, какую модификацию вы хотите выполнить в JSON. Когда ваш JSON находится в вашем POJO, вы можете внести все необходимые изменения и снова преобразовать его в JSON.
Я просто хочу правильно его разобрать. Но при использовании JSON без корневого элемента или без добавления поля cardPermissions JAXB генерирует исключение нулевого указателя. Это исправляется так, как я сказал, но я не хочу добавлять корневой элемент, когда я неупорядочиваю, и я не хочу добавлять поле cardPermissions внутри моего POJO. Спасибо за помощь
Проблема здесь в том, что JAXB не игнорирует это конкретное значение, но это происходит, если я включаю корневой элемент в json (см. Редактирование :)