У меня есть XML-файл в качестве входных данных для моей службы Springboot REST, XML выглядит примерно так:
<someelement id="foo">
<property name="somekey" value="somevalue"></property>
<property name="somekey2" value="somevalue2"></property>
<property name="somekey3" value="somevalue3"></property>
<someelement id="blah">
</someelement>
</someelement>
Я могу проанализировать это со следующими классами, после сообщения Джексону мои списки не переносятся:
@XmlRootElement(name = "someelement")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class SomeElement {
@JacksonXmlProperty(isAttribute = true, localName = "id")
private String id;
@JacksonXmlProperty(localName = "property")
private List<Property> properties;
@JacksonXmlProperty(localName = "someelement")
private List<SomeElement> children;
}
@XmlRootElement(name = "Property")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class Property {
@JacksonXmlProperty(isAttribute = true, localName = "name")
private String name;
@JacksonXmlProperty(isAttribute = true, localName = "value")
private String value;
}
@Data
просто генерирует все сеттеры / геттеры.Поэтому, очевидно, я получаю список свойств, который не совсем то, что я хочу.Я хотел бы иметь Map<String, String>
, где анализируются имена и значения свойств.
@XmlRootElement(name = "someelement")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class SomeElement {
@JacksonXmlProperty(isAttribute = true, localName = "id")
private String id;
// some annotation here that takes all child property tags
// and parses the name/value pairs into this map
private Map<String, String> properties;
@JacksonXmlProperty(localName = "someelement")
private List<SomeElement> children;
}
Как бы я занялся чем-то подобным?Должен ли я написать свой собственный десериализатор для этого?Просто кажется, что, возможно, есть простой способ, который я пропускаю, поскольку на бумаге это не кажется сложным / необычным.