Question

Je le JSON suivant, où peut être vrai ou faux:

{"flag1":<boolean value>, "flag2":<boolean value>}

Et j'ai essayé de le lier à une classe Java en utilisant Jersey et les annotations JAXB suivantes:

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

    ...
}

Le problème est que lorsque j'attribue une valeur non booléenne « flag1 » ou « flag2 », comme dans l'exemple ci-dessous, JAXB attribue automatiquement une valeur fausse à la « flag1 » et les champs « de flag2 » de MyClass.

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

Est-il possible d'annoter « MyClass » de sorte que lorsque « la flag1 » et « flag2 » de JSON ne sont pas booléen je reçois une exception?

Était-ce utile?

La solution

Il ressemble à Jersey est tout simplement en utilisant Boolean.valueOf , qui traite tout autre qu'un « vrai » littéral comme faux. Étant donné que JavaScript ne dispose pas d'une notion de type de variable, c'est sans doute un comportement valide.

Un mapping XML, par comparaison, est basée sur une définition de schéma, qui a une notion très spécifique de valeurs booléennes.


Ne pas avoir utilisé Jersey (ou JAXB depuis les jours 1.x), je me demande si vous avez annoter les variables réelles, ou si vous pouvez annoter les setters. Ou vous pourriez peut-être fournir un setter qui prend un String et parse, au lieu de / avec un compositeur qui prend boolean.

Autres conseils

Ce que vous montriez fonctionnerait de la façon dont vous voulez (lancer une exception) si vous avez utilisé pur Jackson fournisseur JAX-RS. Il accepte les quelques variations (1 et 0, étant donné que certaines langues ne sont pas de type booléen natif), mais pas des choses qui ont un sens sans équivalent.

Sinon, comme l'a suggéré, une méthode setter de type chaîne serait logique, car vous pouvez contrôler manuellement les conversions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top