2009-08-11 7 views
0

ich die folgenden JSON habe, wo kann entweder wahr oder falsch Anmerkungen:zu einer Java-Klasse eines JSON-Bindung JAXB mit

@XmlRootElement 
public class MyClass { 
    @XmlElement(name = "flag1", type = Boolean.class) 
    private Boolean flag1; 
    @XmlElement(name = "flag2", type = Boolean.class) 
    private Boolean flag2; 

    ... 
} 

Das Problem ist, dass, wenn I ein nicht-booleschen Wert in ‚flag1‘ oder ‚flag2‘, wie im Beispiel unten zuweisen, JAXB automatisch einen falschen Wert zu dem ‚flag1‘ zuordnet und ‚flag2 'Felder von MyClass.

{"flag1":"foo", "flag2":"bar"} 

Gibt es eine Möglichkeit ‚MyClass‘ mit Anmerkungen zu versehen, so dass, wenn JSON des ‚flag1‘ und ‚flag2‘ nicht ich eine Ausnahme erhalten boolean?

+0

JAXB unterstützt jetzt JSON? Oder verwenden Sie eine Bibliothek eines Drittanbieters? – kdgregory

+0

Ich benutze Jersey. https://jersey.dev.java.net/ –

+0

Ich denke, Jersey nutzt die JAXB Annotationen, aber mit einer eigenen Laufzeit. – skaffman

Antwort

2

Es sieht aus wie Jersey ist einfach mit Boolean.valueOf, die alles andere als ein Literal "wahr" als falsch behandelt. Da JavaScript keine Vorstellung vom Variablentyp hat, ist dies ein wohl gültiges Verhalten.

Eine XML-Zuordnung basiert im Vergleich auf einer Schemadefinition, die eine sehr spezifische Vorstellung von booleschen Werten hat.


Nicht Jersey benutzt zu haben (oder JAXB seit den 1.x Tage), ich frage mich, ob Sie die aktuellen Variablen mit Anmerkungen versehen haben, oder wenn Sie die Setter mit Anmerkungen versehen können. Oder vielleicht könnten Sie einen Setter bereitstellen, der eine String nimmt und analysiert, anstatt/zusammen mit einem Setter, der eine boolean nimmt.

2

Was Sie gezeigt haben, würde funktionieren wie Sie wollen (eine Ausnahme auslösen), wenn Sie reinen Jackson JAX-RS-Provider verwendet haben. Es akzeptiert einige Variationen (1 und 0, da einige Sprachen keinen nativen booleschen Typ haben), aber keine Dinge, die keine sinnvolle Entsprechung haben.

Alternativ könnte, wie vorgeschlagen, eine Setter-Methode mit dem Typ String sinnvoll sein, da Sie dann Konvertierungen manuell steuern können.