2013-02-05 3 views
8

gibt es eine Möglichkeit, eine Java-Var (z. B. Int) über Jackson als XML-Attribut zu serialisieren? Ich kann keine spezielle Jackson oder JSON-Annotation (@XmlAttribute @ javax.xml.bind.annotation.XmlAttribute) finden, um dies zu realisieren.Wie serialisieren Sie Java-Objekt als XML-Attribut mit Jackson?

z.B.

public class Point { 

    private int x, y, z; 

    public Point(final int x, final int y, final int z) { 
     this.x = x; 
     this.y = y; 
     this.z = z; 
    } 

    @javax.xml.bind.annotation.XmlAttribute 
    public int getX() { 
     return x; 
    } 
    ... 
} 

Was ich will:

<point x="100" y="100" z="100"/> 

aber alles was ich habe ist:

<point> 
    <x>100</x> 
    <y>100</y> 
    <z>100</z> 
</point> 

Gibt es eine Möglichkeit Attribute anstelle von Elementen zu bekommen? Danke für Hilfe!

+0

Es gibt kein Problem mit dem Int-Typ. Was auch immer ich versuchte, ich habe nur XML-Elemente anstelle von Attributen. – Divine

Antwort

13

Okay, ich habe eine Lösung gefunden.

Es war nicht notwendig, eine AnnotaionIntrospector zu registrieren, wenn Sie

jackson-Datenformat-xml verwenden
File file = new File("PointTest.xml"); 
XmlMapper xmlMapper = new XmlMapper(); 
xmlMapper.writeValue(file, new Point(100, 100, 100)); 

Das fehlende TAG war

@JacksonXmlProperty (isAttribute = true)

so einfach ändern der Getter zu:

@JacksonXmlProperty(isAttribute=true) 
public int getX() { 
    return x; 
} 

und es funktioniert gut. Folgen Sie einfach dieser, wie Sie:

https://github.com/FasterXML/jackson-dataformat-xml

@JacksonXmlProperty erlaubt XML-Namespace spezifiziert und die lokalen Namen für eine Eigenschaft; sowie ob die Eigenschaft als XML-Element oder -Attribut geschrieben werden soll.

1

Haben Sie sich registriert JaxbAnnotationIntrospector?

ObjectMapper mapper = new ObjectMapper(); 
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); 
// make deserializer use JAXB annotations (only) 
mapper.getDeserializationConfig().setAnnotationIntrospector(introspector); 
// make serializer use JAXB annotations (only) 
mapper.getSerializationConfig().setAnnotationIntrospector(introspector); 
+0

Ihr Code scheint veraltet zu sein, aber ich werde es ausprobieren. – Divine