Ich habe ein Objekt, das ich von einer REST-API im XML-Format zurückbekomme. Ich kann diesen Objekttyp erstellen und aktualisieren. In meinem Rest-Client möchte ich ein Attribut mit einigen meiner Elemente angeben. Nehmen wir an, ich kann ein Attribut wie access = "LOCKED" angeben, um dieses Feld in der Benutzerschnittstelle schreibgeschützt zu machen.So fügen Sie ein gemeinsames XML-Attribut mehreren Elementen hinzu
Beispiel: Benutzerobjekt
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "User")
public class User {
private String userName;
private String userId;
private String firstName;
private String lastName;
private String email;
@XmlAttribute(name="username")
public void setUserName(String userName) {
this.userName = userName;
}
@XmlAttribute(name = "userId", namespace = "some namespace")
public void setUserId(String userId) {
this.userId = userId;
}
@XmlElement(name = "FirstName")
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@XmlElement(name = "LastName")
public void setLastName(String lastName) {
this.lastName = lastName;
}
@XmlElement(name = "Email")
public void setEmail(String email) {
this.email = email;
}
}
Marshalling mit JAXB:
User user = User.builder().email("[email protected]").userName("jd")
.userId("123").firstName("Jane").lastName("Doe").build();
JAXBContext jaxbContext = JAXBContext.newInstance(Iser.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(user, System.out);
Unter der Annahme, dass ich den Zugang für E-Mail und Nachname festlegen möchten, Wie würden Sie dieses „Zugang mit Anmerkungen versehen "Attribut, um es auf jedes dieser Elemente zu setzen?
Erwartete Ausgabe mit dem Zugriffsattribut:
<User username="jd" ns:userId="123">
<FisrtName>Jane</FirstName>
<LastName access="LOCKED">Doe</LastName>
<Email access="LOCKED">[email protected]</Email>
</User>
Eine Lösung besteht darin, die Elemente selbst zu Objekten zu machen, und dann können sie eigene Attribute haben. Dies kommt jedoch mit viel doppeltem Code. – Saeed