gpt4 book ai didi

Java UnMarshall XML 给出 null 对象

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

UnMarshalling XML 给出 null java 对象。

XML:

<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item Name="John"/>
<Item Name="Jason"/>
</Items>

元素类别:

@XmlRootElement(name = "Items")
@XmlAccessorType(XmlAccessType.FIELD)
public class Items{

@XmlElement
private List<Item> item;

public List<Item> getItem() {
return this.Item;
}

}

项目类别:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Item")
public class Item{

@XmlAttribute
private String name;

public String getName() {
return this.Name;
}

}

UnMarshalls 的 Java 代码:这里 result.getBody 给出 XML 字符串

ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);


JAXBContext jaxbContext = JAXBContext.newInstance(Items.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();


Items itResult = (Items) jaxbUnmarshaller.unmarshal(new StringReader(result.getBody()));

Item 对象始终为 null。如何正确解码 xml?提前致谢。 :

最佳答案

使用以下类:

Item.java

@XmlRootElement(name = "Item")
public class Item
{


private String name;

public String getName()
{
return this.name;
}

@XmlAttribute(name = "Name" )
public void setName( String name )
{
this.name = name;
}

}

Items.java

@XmlRootElement(name = "Items")
public class Items
{

@XmlElementWrapper( name = "Items")
private List<Item> items = new ArrayList<Item>();


public List<Item> getItemList()
{
return this.items;
}

@XmlElement(name = "Item")
public void setItemList( List<Item> items )
{
this.items = items;
}

}

测试.java

public class Test
{
public static void main( String... args )
{
try
{
JAXBContext jaxbContext = JAXBContext.newInstance( Items.class );
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Items itResult = (Items) jaxbUnmarshaller.unmarshal( new File( "Items.xml" ) );

if ( itResult != null )
{
List<Item> items = itResult.getItemList();
for ( Item item : items )
{
System.out.println( item.getName() );
}
}
}
catch ( Exception e )
{
e.printStackTrace();
}
}

}

您应该获取包含 ItemItems 对象。

我所做的更改:

a) 列表中需要有一个 @XmlElementWrapper,它表示 ItemsItem 的包装器。

b) 将 @XmlAttribute 移动到 Item.java

中的 setter

c) 将 @XmlElement 移动到 Items.java

中的 setter

关于Java UnMarshall XML 给出 null 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44436405/

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