2013-07-18 3 views
3

J'ai hérité d'un projet dans Spring MVC 3.1.1 et j'ai besoin d'utiliser Jackson pour sérialiser les objets en JSON. J'ai une classe d'objets comme:Comment configurer/configurer les annotations Jackson pour qu'elles fonctionnent dans Spring MVC?

public class User { 
    Integer id; 
    String name; 

    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

et un contrôleur comme ceci:

@Controller 
@RequestMapping(value = "/home") 
public class homeController { 
    @RequestMapping(value = "/") 
    public @ResponseBody User home() { 
     User user; 
     user = new User(); 

     user.setId(1); 
     user.setName("Drew"); 

     return user; 
    } 
} 

Naviguer vers/home et je reçois:

{"id":1,"name":"Drew"} 

Grande, qui est la première étape vers le bas. Maintenant, si je veux ignorer le paramètre "id", la documentation de Jackson dit que je devrais utiliser l'annotation @JsonIgnore. Le problème que j'ai est que NetBeans ne peut localiser aucun des paquets d'annotations à importer pour Jackson, donc je ne peux pas utiliser les annotations. J'ai essayé de télécharger les fichiers jar Jackson 2.2 et d'ajouter ceux-ci à mon projet (ce qui me permet ensuite d'importer les annotations), mais l'annotation @JsonIgnore n'a aucun effet quand je le fais.

Je soupçonne qu'il me manque un fichier jar de Spring MVC ou que j'ai besoin de configurer quelque chose dans les fichiers XML du projet, comment pourrais-je savoir si l'un ou l'autre est le cas? Je suis relativement nouveau à Java et je n'ai jamais utilisé le printemps avant, donc s'il y a des informations supplémentaires qui seraient utiles que je ne savais pas que vous auriez besoin, s'il vous plaît demander et je ferai de mon mieux pour les localiser. Merci d'avance pour toute aide que vous pouvez donner!

modifier:

Pour clarifier les choses, je l'ai essayé d'utiliser des annotations comme ceci:

public class User { 
    Integer id; 
    String name; 

    @JsonIgnore 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    @JsonProperty("userName") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

et comme ceci:

@JsonIgnoreProperties({"id"}) 
public class User { 
    Integer id; 
    String name; 

    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    @JsonProperty("userName") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

et JSON retournée est toujours le même:

{"id":1,"name":"Drew"} 
+0

Utilisez-vous maven ou quelque chose comme ça, ou vous utilisez uniquement NetBeans "dependencies system"? –

+0

Pas de Maven, juste NetBeans. – asgallant

+0

Assurez-vous que vous n'avez pas à la fois Jackson1 (codehaus) et Jackson2 (fasterxml) dans votre classpath. –

Répondre

1

J'ai fini par passer à Spring 3.2.2, qui, avec les bibliothèques Jackson 2.2, a résolu le problème. Toutes les annotations de Jackson fonctionnent correctement maintenant. Je suppose que cela signifie qu'il y avait quelque chose de mal avec l'installation 3.1.1 qui a gâché les choses Jackson, mais qui sait?

Merci à tous ceux qui ont répondu.

1

Ajoutez les JAR Jackson à votre classpath. Si vous utilisez Maven, ajoutez Jackson2 en tant que dépendance, ou copiez manuellement les JAR requis dans votre classpath. Le printemps fera le reste.

+0

J'ai ajouté les fichiers JAR de Jackson 2.2 au projet, ce qui résout le problème de pouvoir importer les annotations de Jackson, mais les annotations ne fonctionnent toujours pas lorsque je le fais. – asgallant

1

Essayez d'utiliser @JsonIgnoreProperties au lieu de @JsonIgnore

+0

J'ai essayé ça, et ça ne marche pas. Aucune des annotations ne semble avoir d'effet sur la sortie. – asgallant

5

Il vous manque des dépendances Jackson sur votre chemin de classe. Vous devez ajouter des dépendances sur les bocaux suivants:

  1. jackson-core
  2. jackson-DataBind
  3. jackson-annotations

Une fois que vous avez ces dépendances vous avez ajouté peut empêcher les champs d'être sérialisé en plaçant l'annotation @JsonIgnore sur le getter comme suit:

public class User { 
    Integer id; 
    String name; 

    @JsonIgnore 
    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 
+0

Idéalement, oui, cela devrait fonctionner. Mon problème est que ça ne marche pas. – asgallant

+0

@asgallant - mis à jour ma réponse en fonction de l'édition de votre question. Il vous manque toujours des dépendances jar. Jetez un oeil à la liste ci-dessus dans ma réponse. – gregwhitaker

Questions connexes