@JsonProperty annotation sur le terrain ainsi que les getter/setter
J'ai hérité d'un certain peu de code qui a l' @JsonProperty annotation sur lecture/définition. Le but est donc que lorsque l'objet est sérialisé à l'aide de l'Jackson bibliothèque, les champs ont que le nom spécifique.
Code actuel:
private String fileName;
@JsonProperty("FILENAME")
public String getFileName()
{
return fileName;
}
@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
this.fileName = fileName;
}
Maintenant pour un autre outil, j'ai besoin d'annoter le terrain avec JsonProperty ainsi. Ce sera donc mon code modifié:
@JsonProperty("FILENAME")
private String fileName;
@JsonProperty("FILENAME")
public String getFileName()
{
return fileName;
}
@JsonProperty("FILENAME")
public void setFileName(String fileName)
{
this.fileName = fileName;
}
Quelqu'un a utilisé ce même annotation sur les deux - le terrain ainsi que de la lecture/définition? J'ai regardé sur le net mais n'ai rien vu.
J'ai compilé & exécuter le code, mais je ne suis pas si sûr que ce serait-ce la cause des problèmes en bas de la route. Des idées sur ce point?
- Comme il est, vous n'auriez pas un problème parce que vous ne faites rien dans l'incubateur d'autre que la définition de la valeur. Toutefois, si cela devait changer, je serais vous inquiétez au sujet de laquelle un Jackson utilisation; si il a pris du champ, vous risquez de ne pas obtenir le comportement que vous attendez. Malheureusement, je ne trouve rien sur l'ordre de priorité pour vous.
- +1. Oui, un ordre de priorité serait utile, mais bien sûr ça ne devrait vraiment pas AVOIR des noms différents.
Vous devez vous connecter pour publier un commentaire.
Mes observations sur la base d'un petit nombre d'essais a été que, quel que soit le nom diffère du nom de la propriété est celle qui prend effet:
Pour eg. envisager une légère modification de votre cas:
Les deux
fileName
champ, et la méthodegetFileName
, d'avoir le bon nom de la propriété defileName
etsetFileName
a un autrefileName1
, dans ce cas, Jackson va chercher unfileName1
attribut en json au moment de la désérialisation et permettra de créer un attribut appeléfileName1
au point de sérialisation.Maintenant, pour en venir à votre cas, où tous les trois @JsonProperty différer de la valeur par défaut propertyname de
fileName
, il suffit de choisir l'un d'eux en tant qu'attribut(FILENAME
), et avait tout sur les trois différentes, il aurait jeté une exception:En plus de bonnes réponses, notez que Jackson 1.9 gestion améliorée par l'ajout de la propriété "unification", ce qui signifie que TOUTES les annotations de la différence des parties d'une logique de propriété sont combinés, à l'aide de (espérons-le) intuitive priorité.
À Jackson 1,8 et avant, seulement le terrain et de lecture des annotations ont été utilisés lors de la détermination de quoi et comment sérialiser (écrit JSON); et, seul, et de définition des annotations pour la désérialisation (lecture JSON). Cela exige parfois plus de "extra" annotations, comme l'annotation des deux méthodes getter et setter.
Avec Jackson 1,9 et au-dessus de ces annotations ne sont PAS nécessaires. Il est toujours possible d'ajouter ceux-ci; et si des noms différents sont utilisés, on peut créer des "split" (propriétés sérialisation à l'aide d'un seul nom, la désérialisation de l'utilisation d'autres): c'est parfois utile pour le tri de changement de nom.