Excluant les champs dans JAXB
J'ai 2 classes:
@XmlRootElement
public class A {
private Long id;
private B b;
//setters and getters
}
et
@XmlRootElement
public class B {
private Long id;
private String field1;
private String field2;
//setters and getters
}
Par défaut, si je transforme une instance de la classe A
pour le XML, je vais avoir tous ses domaines (id
) et référencés B
champs de la classe (id
, field1
, field2
) comme ceci:
<a>
<id>2</id>
<b>
<id>5</id>
<field1>test1</field1>
<field2>test3</field2>
</b>
</a>
Est possible de modifier ce champs de référencé classe B
sont inclus dans le fichier XML de la A
classe? E. g. Je veux dire que lorsque je transforme une instance de A
classe, je veux juste id
de la B
classe (pas de field1
et field2
champs), donc je veux obtenir:
<a>
<id>2</id>
<b>
<id>5</id>
</b>
</a>
Je ne veux pas en permanence annoter le B
classe (à l'aide @XMLTransient
ou @XMLElement
) pour y parvenir, comme il y a des cas où je veux exporter l'ensemble B
classe, comme c'est (avec id
, field1
et field2
.)
Je ne veux pas d'exportation de tous ces champs lors de la B
classe est référencé à partir de A
.
Est-ce même possible avec JAX-B?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
@XmlTransient
sur le terrain. Par défaut également JAXB liaisons peut être substituée à une portée globale ou au cas par cas selon les besoins à l'aide de liaison personnalisée déclarations.Découvrez la Guide de JAXB de Baeldung site web pour plus d'exemples.
Vous pouvez utiliser les annotations
@XmlTransient
d'ignorer les champs. Mettre cette annotation sur le terrain lui-même ou de ses électeurs.B
classefield1
etfield2
champs? Ne serait-il pas la cause de supprimer lefield1
etfield2
de se produire lors de la transformation de une instance deB
classe?Ok, je suis venu avec quelques hacky solution:
J'ai fourni un supplément de getter juste pour le REPOS de cas d'utilisation, donc c'est comme:
Il en résulte la structure suivante:
Ce n'est pas exactement la même structure que je vise pour que cela fonctionne pour moi.
Je n'aime pas cette solution - un
@XMLExclude({"field1", "field2"})
ou quelque chose comme ça serait beaucoup plus propre à mon avis.Néanmoins - pour le moment, il fonctionne, il est moche, mais ça fonctionne.