2013-02-05 17 views
8

c'è un modo per serializzare una java var (ad es. Int) tramite jackson come attributo xml? Non riesco a trovare nessuna nota spezzata di jackson o json (@XmlAttribute @ javax.xml.bind.annotation.XmlAttribute) per realizzare questo.Come serializzare l'oggetto java come attributo xml con jackson?

ad es.

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; 
    } 
    ... 
} 

quello che voglio:

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

ma tutto quello che ho è:

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

C'è un modo per ottenere gli attributi invece di elementi? Grazie per l'aiuto!

+0

Non c'è alcun problema con il tipo int. Che cosa ho mai provato, ho appena ricevuto elementi xml invece di attributi. – Divine

risposta

13

Okay, ho trovato una soluzione.

non è stato necessario registrare un AnnotaionIntrospector se si utilizza jackson-dataformat-xml

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

Il TAG che mancava era

@JacksonXmlProperty (isAttribute = true)

quindi basta cambiare il getter a:

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

e funziona correttamente. Basta seguire questo come:

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

@JacksonXmlProperty permette di specificare namespace XML e nome locale per una proprietà; nonché se la proprietà deve essere scritta come elemento o attributo XML .

1

Ti sei registrato 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

Il tuo codice sembra essere deprecato, ma lo proverò. – Divine

Problemi correlati