#java #xml #jackson
#java #xml #джексон
Вопрос:
У меня проблема с десериализацией следующего xml:
<root>
<apples>
<apple>
<id>1</id>
<weight>0.6</id>
</apple>
<apple>
<id>2</id>
<weight>0.7</id>
</apple>
</apples>
</root>
для java:
public class Root {
private List<Fruits> fruits;
}
В приведенном выше источнике xml другими вариантами могут быть, например, апельсины / апельсины и т. Д. Также, Поскольку это собственный xml, я не могу изменить его схему. По умолчанию я использую @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
и @JsonSubTypes({/*fruits subtypes listed*/})
. После нескольких неудачных попыток я не уверен, какое правильное отображение / конфигурация для решения проблемы.
Ответ №1:
Из коробки, Jackson
это JSON
парсер, а не XML
.
Существуют расширения Jackson
, позволяющие осуществлять XML
конвертацию. См. http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding для получения дополнительной информации там. Но кажется, что чистый синтаксический анализатор XML может быть лучше для этого случая.
Возможно javax.xml.stream.*
, посылки.
т. е. http://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-and-stax-parser-in-java.html для получения дополнительной информации.
Комментарии:
1. Я знаю о лучших решениях для сопоставления XML. Я рассматриваю возможность использования одного из них. Однако я пишу интеграцию для нескольких служб rest (используя spring RestTemplate) — большинство из них использует json, и теперь это всего лишь второй случай, когда требуется использовать rest — XML (и без schema / DTD). Поэтому, прежде чем я решу использовать другое решение, я бы попытался решить эту проблему, даже используя выделенный десериализатор.
2. ОК. Я подозреваю, что пытаться использовать его будет сложнее
Jackson
XML
, ноXmlDataBinding
ссылка, которую я добавил выше, может стоить попробовать, если вы хотите продолжитьJackson
. Я бы просто добавил, что, поскольку он не поддерживается «из коробки», использование чего-то подобного, поXmlDataBinding
сути, также является другим решением.