Jackson ne prévalent Pas de lecture avec @JsonProperty
JsonProperty
n'est pas primordial, le nom par défaut jackson obtient à partir de la lecture. Si je sérialiser la classe ci-dessous avec ObjectMapper
et jackson-je obtenir
{"hi":"hello"}
Comme vous pouvez le voir le JsonProperty annotation n'a pas d'effet
class JacksonTester {
String hi;
@JsonProperty("hello")
public String getHi() {
return hi;
}
}
Mettre @JsonProperty
sur la Chaîne elle-même ne fonctionne pas non plus. La seule façon, il semble que je peux modifier le nom est en renommant le fonceur, le seul problème est qu'ensuite, il sera toujours en minuscules pour la première lettre
OriginalL'auteur tt_Gantz | 2015-09-29
Vous devez vous connecter pour publier un commentaire.
Le problème est que j'ai été en utilisant à la fois l'ancien et le nouveau jackson bibliothèques
c'est à dire avant que j'ai eu
import org.codehaus.jackson.annotate.JsonProperty;
Que j'ai eu à changer de ci-dessous, pour être conforme à la bibliothèque, j'ai été à l'aide.
Depuis que j'ai été à l'aide de maven qui signifiait aussi la mise à jour des dépendances maven.
import com.fasterxml.jackson.annotation.JsonProperty;
Pour que ça fonctionne, j'avais besoin de la
@JsonProperty
annotation sur le getter (le mettre sur l'objet n'a pas de travail)J'ai trouvé la réponse ici (merci à francescoforesti)
@JsonProperty ne fonctionne pas comme prévu
Vous pouvez utiliser
@JsonSetter
sur le setter de changer l'hélice nom à rechercher si la var nom ne coïncide pas avec le json prop nom.OriginalL'auteur tt_Gantz
J'ai eu ce problème lors de la mise à jour depuis une ancienne version 2.8.3 de FasterXML Jackson.
La question était lors de la désérialisation la réponse JSON à partir de notre DB en Java de la classe de l'objet, de notre code n'a pas
@JsonSetter
sur la classe' setters. Par conséquent, lors de la sérialisation, la sortie n'était pas en utilisant la classe " getters pour sérialiser la Java de la classe de l'objet en JSON (d'où le@JsonProperty()
décorateur n'a pas d'effet).J'ai résolu le problème en ajoutant
@JsonSetter("name-from-db")
à la méthode de définition de cette propriété.Aussi, au lieu de
@JsonProperty()
, pour renommer propriétés à l'aide de la méthode de lecture, vous pouvez et devez utiliser@JsonGetter()
qui est plus spécifique à renommer propriétés.Voici notre code:
OriginalL'auteur Xchai
Chameau cas semblent encore avoir des problèmes, même après la définition correcte des annotations.
Exemple:
@JsonProperty("mirrorport")
private String mirrorPort;
Désérialisation échoue encore lorsque le xml a
<mirrorport>YES</mirrorport>
OriginalL'auteur gpushkas
J'avais même proplem
Vous avez juste besoin de remplacer l'importation
import com.fasterxml.jackson.annotation.JsonProperty;
sur
import org.codehaus.jackson.annoter.JsonProperty;
Ses travaux.
OriginalL'auteur Dmitriy S
Placer sur la variable, pas de la lecture
Avez-vous essayé la version détaillé
@JsonProperty(value = "hello")
soit sur le terrain ou sur la lecture?essayé et ça n'a pas faire une différence
Ok. Avez-vous déjà lu ceci : stackoverflow.com/questions/21125173/... ? Un commentaire dit que cela pourrait se produire si vous avez 2 bibliothèques qui contiennent la même annotation, et le faux est de s'habituer.
OriginalL'auteur mprivat
Avez-vous essayé ci-dessous
Je veux dire faire de la " hi " déclaration de variable comme privé.
Sinon, d'essayer de mettre un @JsonIgnore sur la déclaration de la variable et dans le cas où vous préférez le garder à la portée par défaut.
Après avoir regardé votre réponse sur la véritable cause, j'aurais été surpris si ma solution a fonctionné.
OriginalL'auteur vvs
Je suis récemment tombé sur une autre tournure intéressante sur cette question. Nous avons commencé à utiliser le Hibernate5Module pour aider avec certains de chargement différé des questions. En outre, nous utilisons Groovy donc nous ne sommes pas à la définition des getters et setters.
Il s'avère que la veille prolongée Module semble interférer avec la
@JsonProperty
annotation. Spécifiquement si vous avez quelque chose annoté avec@Transient
Donc, si vous avez quelque chose comme:Vous ne verrez pas le
alternateName
dans le JSON. En outre, vos clients vont probablement avoir de la difficulté à leurs Postes et Met! Pour résoudre ce problème, vous pouvez utiliser une solution de contournement simple. Définir les getters et setters pour le nom interne, vous devez utiliser(*) et n'utilisez pas levalue
attribut sur@JsonProperty
Donc cela fonctionne:Notez l'utilisation de la
@JsonIgnore
sur la lecture. Si vous ne le faites pas, votre cadre sera probablement ramasser et vous aurez des entrées en double pour la même chose dans votre JSON.De toute façon - je suis en espérant que cela aide quelqu'un!
(*)Nous avons essayé d'adhérer à une interface particulière, appliquant ainsi le nom de l'interne. Cependant, l'exposé de l'API besoin d'un autre, le nom convivial.
OriginalL'auteur Michael Kolakowski
J'ai été absent databind dépendance
OriginalL'auteur Ketan Keshri