1

所需的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 )......但我不知道是否有解决方法

4

0 回答 0