所需的xml:
<bean>
<paths>
<path>foo/bar/</path>
<path>x/y</path>
<paths>
<morePaths>
<path>a/b/c</path>
<path>j/k/l</path>
<morePaths>
<bean>
请注意,两个集合中的项目标签是相同的:“路径”它们是否被不同的标签包装:“路径”和“更多路径”
带注释的 bean 就像(使用 lombok):
@JacksonXmlRootElement(localName="bean")
@Accessors(prefix="_")
@NoArgsConstructor @AllArgsConstructor
public static class TestBean {
@JacksonXmlElementWrapper(localName="paths") @JacksonXmlProperty(localName="path")
@Getter @Setter private Collection<Path> _pathCol;
@JacksonXmlElementWrapper(localName="otherPaths") @JacksonXmlProperty(localName="path")
@Getter @Setter private Collection<Path> _otherPathCol;
}
问题: 映射时抛出异常,说有两个属性映射到同一个标签(path)
@Test
public void test() throws IOException {
XmlMapper xmlMapper = new XmlMapper();
TestBean myBean = new TestBean(Lists.<Path>newArrayList(Path.from("/a/b/c"),
Path.from("d/e/f")),
Lists.<Path>newArrayList(Path.from("/foo/bar/baz"),
Path.from("x/y/z")));
System.out.println("XML: " + xmlMapper.writeValueAsString(myBean));
}
例外:
com.fasterxml.jackson.databind.JsonMappingException: Multiple fields representing property "path"
如果使用不同的属性名称,一切正常:
@JacksonXmlRootElement(localName="bean")
@Accessors(prefix="_")
@NoArgsConstructor @AllArgsConstructor
public static class TestBean {
@JacksonXmlElementWrapper(localName="paths") @JacksonXmlProperty(localName="paths_path")
@Getter @Setter private Collection<Path> _pathCol;
@JacksonXmlElementWrapper(localName="otherPaths") @JacksonXmlProperty(localName="otherPaths_path")
@Getter @Setter private Collection<Path> _otherPathCol;
}
但是,xml 输出不是必需的:
<bean>
<paths>
<paths_path>foo/bar/</paths_path>
<paths_path>x/y</paths_path>
<paths>
<morePaths>
<morePaths_path>a/b/c</morePaths_path>
<morePaths_path>j/k/l</morePaths_path>
<morePaths>
<bean>
如何设法在两个集合中获取具有相同标签的项目?
注意:实际上这是一个已知问题(请参阅:https ://github.com/FasterXML/jackson-dataformat-xml/issues/192 )......但我不知道是否有解决方法