Ignorant de la propriété lors de la désérialisation
J'ai une interface simple avec getter et setter pour un bien.
public interface HasMoney {
Money getMoney();
void setMoney(Money money);
}
J'ai une autre classe Compteutilisateur qui implémente cette interface.
public class UserAccount implements HasMoney {
private Money money;
@Override
Money getMoney() //fill in the blanks
@Override
void setMoney(Money money) //fill in the blanks
}
Mon problème est que je veux pour sérialiser l'argent de la propriété, mais ignore tout de la désérialisation elle c'est à dire, ne pas accepter toutes les valeurs de l'utilisateur pour cette propriété. J'ai essayé @JsonIgnore sur setter et @JsonIgnore(false) sur le getter, il ne l'ignore mais il le fait lors de la sérialisation de c'est aussi.
J'ai essayé @JsonIgnore sur le setter et @JsonProperty sur le getter juste pour indiquer explicitement à Jackson que nous avons l'intention de suivre cette propriété, qui semble le plantage de l'application lors de l'argent de la propriété est envoyé au serveur et Jackson essaie de désérialiser les vomissements MalformedJsonException : ne peut pas créer d'objet de type de l'Argent.
Le plus bizarre c'est que en mettant @JsonIgnore sur le setter et @JsonProperty sur le setter fonctionne pour la plupart des cas, lorsque la propriété est primitif.
Vous devez vous connecter pour publier un commentaire.
Ok, donc le comportement de @JsonIgnore a radicalement changé, passant de 1,9 à partir de (pour le pire de l'omi). Sans entrer dans les diaboliques de détails de pourquoi votre propriété n'est pas ignorer lors de la désérialisation, essayez ce code pour résoudre le problème:
Notez l'utilisation de
@JsonIgnore
sur le terrain lui est nécessaire pour une solution de travail.Remarque: en fonction de votre environnement et de cas d'utilisation, vous pouvez avoir besoin d'une configuration supplémentaire sur votre ObjectMapper, par exemple, USE_GETTERS_AS_SETTERS, AUTO_DETECT_GETTERS, AUTO_DETECT_SETTERS etc.
USE_GETTERS_AS_SETTERS
.Version 2.6.0+ permet de le faire avec @JsonIgnoreProperties au niveau de la classe.
Jetez un oeil à cette question fermée:
https://github.com/FasterXML/jackson-databind/issues/95
Dans un cas que vous ne possédez pas ou ne peut pas changer la classe en ajoutant
@JsonIgnore
d'annotation, vous obtiendrez le résultat escompté par l'aide de mixin à partir de la version 2.5 dans votre mise en œuvre.configurer mappeur à utiliser mixin,