gpt4 book ai didi

java - JAXB 整数和长解析

转载 作者:行者123 更新时间:2023-12-01 10:54:30 24 4
gpt4 key购买 nike

我有一个包含多个数值的对象结构:

@XmlTransient
public class Person
{
private Integer age;
private Long shoeSize;
public setAge(Integer age){...}
public getAge(){return age;}
...
}

public class Child extends Person
{
private Integer readingAge;
public setReadingAge(Integer readingAge){...}
public getReadingAge(){return readingAge;}
}

public class Team
{
private ArrayList<Child> children = new Arraylist<Child>();
...
}

因此,当我整理 Child 对象时,年龄会被忽略。年龄有可能为空,因此我不能仅将其添加为 int 值。

@xmlTransient 背后的原因是因为我需要编码以按字母顺序编码整个文档。如果我删除 transient ,则对 person 元素进行排序,然后将子元素添加到末尾。

所以我的问题是:无论如何,我是否可以在不将值默认为 0 的情况下识别年龄?我可以在不设置 transient 标志的情况下对整个文档进行排序吗?我尝试简化我的示例,因为实际示例有 100 个元素

目标 XML:

<Team>
<Child>
<age>5</age>
<readingAge>25</readingAge>
<shoeSize>1</shoeSize>
</Child>
</Team>

但是如果年龄为空:

<Team>
<Child>
<readingAge>25</readingAge>
<shoeSize>1</shoeSize>
</Child>
<Team>

编码类:

Child c = new Child(5, 9, 25);
Team t = new Team();
t.getChildren().put(c);
if (getMarshaller() == null)
{
JAXBContext context = JAXBContext.newInstance(Team.class);
setMarshaller(context.createMarshaller());
}

StringWriter sw = new StringWriter();
getMarshaller().marshal(t, sw);
String xmlString = sw.toString();

最佳答案

So when I marshall the Child object the age is missed. There is a possability that age can be null so i cannot just add it as an int value.

正确,这就是处理它的方法,如果 null年龄应编码和(稍后)解码为 null再次。 缺少元素的方式是 null值被表示。

Can I order the document as a whole without setting the transient flag?

是的,您可以:ArrayList<Child> children上课Team包含 Child有序集合对象,它们将按此顺序编码,并(稍后)再次解码回到同一个列表中。

I need the marshalling to marshall the whole document in alphabetical order.

这不是 JAXB 会自动为您做的事情。例如,如果children列表应按字母顺序排序,您需要对其进行排序,例如,通过调用 Collections::sort与 Team 对象的字段 children作为它的(第一个)参数。 (我无法提供示例,因为我在 PersonChild 中都没有看到 String 字段,甚至在 XML 示例中也没有。)

编辑

I only need the ordering where inheritance is concerned. E.g. <age>
<readingAge> <shoeSize>

同样,这不是 JAXB 会做的事情,而且这是一个非常不寻常的要求。 (目的是什么?)您最好的选择可能是覆盖 Child 类中的 Person getter,并通过使用注释该类来定义顺序

@XmlType(propOrder = {"age","readingAge","shoeSize"})

关于java - JAXB 整数和长解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696079/

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