gpt4 book ai didi

java - Jackson - 展开嵌套属性

转载 作者:行者123 更新时间:2023-12-02 10:50:25 24 4
gpt4 key购买 nike

我有一个像这样的 xml

<TopLevel attr1="foo">
<Midlevel attr2="bar">
<BottomLevel>
<data1>blahblah</data1>
<data2>blahblah</data2>
</BottomLevel>
...more bottom level elements...
</Midlevel>
...moreMidLevelElements...
</TopLevel>

现在我知道 @JsonUnwrapped 注释可以帮助提升一个级别(它在所有示例中都显示)。但是,当我尝试反序列化捕获外层属性的 BottomLevel 对象时,我只得到所有内容的空值。

谁能帮我压平这个 xml 吗?我试图概括这个问题。理想情况下,最终结果是 List

我的 pojo 有字段数据1数据2属性1属性2

最佳答案

不要认为这是这个问题的完美答案,但它可以帮助解决您遇到的问题。 (以一种黑客的方式)

public static void main(String[] args) throws IOException {
String xml = "<TopLevel attr1=\"foo\">\n" +
" <Midlevel attr2=\"bar\">\n" +
" <BottomLevel>\n" +
" <data1>blahblah</data1>\n" +
" <data2>blahblah</data2>\n" +
" </BottomLevel>\n" +
" </Midlevel>\n" +
" <Midlevel attr2=\"bar2\">\n" +
" <BottomLevel>\n" +
" <data1>blahblah2</data1>\n" +
" <data2>blahblah2</data2>\n" +
" </BottomLevel>\n" +
" </Midlevel>\n" +
"</TopLevel>";

ObjectMapper xmlMapper = new XmlMapper();
System.out.println(xmlMapper.readValue(xml, TopLevel.class)); //Once here, you can now do custom mapping with the TopLevel class object to your custom POJO
}

@JsonIgnoreProperties(ignoreUnknown = true)
static class TopLevel {

@JacksonXmlProperty(isAttribute = true)
private String attr1;

@JacksonXmlElementWrapper(localName = "Midlevel", useWrapping = false)
@JacksonXmlProperty(localName = "Midlevel")
private List<MidLevel> midLevel = new ArrayList<>();

@Override
public String toString() {
return "TopLevel{" +
"attr1='" + attr1 + '\'' +
", midLevel=" + midLevel +
'}';
}
}

static class MidLevel {

@JacksonXmlProperty(isAttribute = true)
private String attr2;

@JacksonXmlElementWrapper(localName = "BottomLevel", useWrapping = false)
@JacksonXmlProperty(localName = "BottomLevel")
private List<BottomLevel> bottomLevels = new ArrayList<>();

@Override
public String toString() {
return "MidLevel{" +
"attr2='" + attr2 + '\'' +
", bottomLevels=" + bottomLevels +
'}';
}
}

static class BottomLevel {

@JacksonXmlProperty(localName = "data1")
private String data1;

@JacksonXmlProperty(localName = "data2")
private String data2;

@Override
public String toString() {
return "BottomLevel{" +
"data1='" + data1 + '\'' +
", data2='" + data2 + '\'' +
'}';
}
}

关于java - Jackson - 展开嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52227212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com