Скажем, мне разметили мои объекты области, таким образом, XML похож на это:
<account id="1">
<name>Dan</name>
<friends>
<friend id="2">
<name>RJ</name>
</friend>
<friend id="3">
<name>George</name>
</friend>
</friends>
</account>
Мой объект области:
@XmlRootElement
public class Account {
@XmlAttribute
public Long id;
public String name;
@XmlElementWrapper(name = "friends")
@XmlElement(name = "friend")
public List<Account> friends;
}
Существует ли простой способ настроить JAXB для рендеринга только на глубину 2? Значение, я хотел бы, чтобы мой XML был похож на это:
<account id="1">
<name>Dan</name>
<friends>
<friend id="2" />
<friend id="3" />
</friends>
</account>
Это можно сделать с помощью XmlJavaTypeAdapter .
Измените учетную запись следующим образом:
@XmlRootElement
public class Account {
@XmlAttribute
public Long id;
public String name;
@XmlElementWrapper(name = "friends")
@XmlElement(name = "friend")
@XmlJavaTypeAdapter( value = AccountAdapter.class )
public List<Account> friends;
}
AccountAdapter.java:
public class AccountAdapter extends XmlAdapter<AccountRef, Account>
{
@Override
public AccountRef marshal(Account v) throws Exception
{
AccountRef ref = new AccountRef();
ref.id = v.id;
return ref;
}
@Override
public Account unmarshal(AccountRef v) throws Exception
{
// Implement if you need to deserialize
}
}
AccountRef.java:
@XmlRootElement
public class AccountRef
{
@XmlAttribute
public Long id;
}