Spring Boot 3: списки XML, содержащие дочерние элементы с одинаковыми именами, создают исключение Jackson InvalidDefinitJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Boot 3: списки XML, содержащие дочерние элементы с одинаковыми именами, создают исключение Jackson InvalidDefinit

Сообщение Anonymous »

У меня проблема с XML DTO. Я пытался собрать его в Spring Boot 3.3.5 и jackson-dataformat-xml v2.18.2. Проблема здесь в том, что у меня есть два списка, которые содержат дочерние элементы с одинаковыми именами в DTO.
DTO выглядит следующим образом:

Код: Выделить всё

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Builder
public class PlayerActivityDto {
@JacksonXmlProperty(localName = "playerActivityId", isAttribute = true)
private String brandId;

@JacksonXmlProperty(localName = "player")
private PlayerDto player;

@JacksonXmlProperty(localName = "playerActivityDetail")
private PlayerActivityDetailDto playerActivityDetail;

@Setter
@Getter
@JacksonXmlProperty(localName = "summaryBalance")
@JacksonXmlElementWrapper(localName = "startingBalanceList")
private List startingBalanceList;

@Getter
@Setter
@JacksonXmlProperty(localName = "summaryBalance")
@JacksonXmlElementWrapper(localName = "endingBalanceList")
private List endingBalanceList;

@JacksonXmlProperty(localName = "playerMovement")
@JacksonXmlElementWrapper(localName = "playerMovementList")
private List playerMovementList;
}
У меня возникла проблема с двумя списками: EndingBalanceList и StartBalanceList. AFAIK, @JacksonXmlProperty(localName = "summaryBalance") должен называть дочерние элементы списков EndBalanceList и StartBalanceList "summaryBalance" и должен создавать действительный XML.
Однако Джексон создает это исключение :

Не удалось оценить сериализацию Джексона для типа [класс PlayerActivityDto]: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: конфликтующие определения метода получения для свойства summaryBalance: PlayerActivityDto#getStartingBalanceList() vs PlayerActivityDto#getEndingBalanceList()

Я пытался присвоить этим спискам собственные сеттеры и геттеры, но, похоже, это не помогает.
РЕДАКТИРОВАТЬ: я нашел обходной путь
Чтобы решить эту проблему, мне пришлось создать новый класс для переноса списка.EDIT: я нашел обходной путь
Чтобы решить эту проблему, мне пришлось создать новый класс для переноса списка.EDIT: я нашел обходной путь
Чтобы решить эту проблему, мне пришлось создать новый класс для переноса списка.EDIT: я нашел обходной путь
Чтобы решить эту проблему, мне пришлось создать новый класс для переноса списка.EDIT: я нашел обходной путь
Чтобы решить эту проблему, мне пришлось создать новый класс, чтобы обернуть список.EDIT. p>
PlayerActivityDto

Код: Выделить всё

@Builder
public class PlayerActivityDto {
@JacksonXmlProperty(localName = "playerActivityId", isAttribute = true)
private String brandId;

@JacksonXmlProperty(localName = "player")
private PlayerDto player;

@JacksonXmlProperty(localName = "playerActivityDetail")
private PlayerActivityDetailDto playerActivityDetail;

@JacksonXmlProperty(localName = "startingBalanceList")
private SummaryBalanceListWrapper startingBalanceList;

@JacksonXmlProperty(localName = "endingBalanceList")
private SummaryBalanceListWrapper endingBalanceList;

@JacksonXmlProperty(localName = "playerMovement")
@JacksonXmlElementWrapper(localName = "playerMovementList")
private List playerMovementList;
}
SummaryListWrapper

Код: Выделить всё

@Builder
public class SummaryBalanceListWrapper {
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "summaryBalance")
private List summaryBalanceList;
}
Похоже, что разработчики Jackson не будут решать эту проблему в ближайшее время, поэтому я надеюсь, что это поможет другим разработчикам, столкнувшимся с той же проблемой.


Подробнее здесь: https://stackoverflow.com/questions/792 ... ckson-inva
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»