Comment puis-je activer boîtier Pascal par défaut lors de l'utilisation Jackson JSON dans Spring MVC?

StackOverflow https://stackoverflow.com/questions/4670116

Question

J'ai un projet qui utilise Spring MVC pour créer et gérer plusieurs points d'extrémité REST. Je travaille actuellement sur l'utilisation de Jackson pour gérer automatiquement le seralization / désérialisation JSON en utilisant les annotations de @RequestBody et @ResponseBody.

J'ai obtenu Jackson travail, donc j'ai un point de départ. Mon problème est que notre ancien sérialisation a été fait manuellement et utilisé boîtier Pascal à la place du boîtier Camel ( « MyVariable » au lieu de « myVariable »), et Jackson ne boîtier Camel par défaut.

Je sais que je peux changer manuellement le nom d'une variable à l'aide @JsonProperty. Cela étant dit, je ne considère pas l'ajout @JsonProperty à toutes mes variables à une solution viable à long terme.

Y at-il un moyen de faire Jackson utiliser boîtier Pascal lors de la sérialisation et désérialisation autre que d'utiliser l'annotation @JsonProperty?

EDIT: On dirait qu'il n'y a pas une manière propre de le faire à l'extérieur. Un couple de personnes ont suggéré différentes classes impérieuses comme un moyen d'atteindre mon objectif. Je suis ouvert aux suggestions sur ce que je peux passer outre cela va changer le boîtier. Au moment où je l'ai fait un ObjectMapper personnalisé qui définit certaines propriétés que je veux (à savoir Inclusion.NON_NULL). Je ne l'ai pas trouvé un endroit encore qui me permettrait de changer le comportement du boîtier. Toute pensée?

Était-ce utile?

La solution 2

J'ai fini par résoudre le problème en remplaçant les (de) serializers. Pour les intéressés, voici comment vous pouvez le faire vous-même:

Étape 1. Étendre BeanSerializerFactory.

Substituer la méthode de _constructWriter(SerializationConfig config, TypeBindings typeContext, PropertyBuilder pb, boolean staticTyping, String name, AnnotatedMember propertyMember). A l'intérieur de cette méthode, modifier name de quelque manière que bon vous semble. Pour mettre en œuvre boîtier Pascal, je cette ligne: String formattedName = name.substring(0, 1).toUpperCase() + name.substring(1);. Après avoir modifié name, appel super._constructWriter.

Étape 2. Étendre BeanDeserializationFactory.

Substituer la méthode de constructSettableProperty(DeserializationConfig config, BasicBeanDescription beanDesc, String name, AnnotatedMethod setter). Faites la même chose avec le paramètre name que vous avez fait dans votre BeanSerializerFactory personnalisé.

Étape 3. Créez un ObjectMapper.

Définir l'usine sérialiseur être votre usine sérialiseur de haricots personnalisé. Réglez le fournisseur de désérialiseur (je cette ligne: objectMapper.setDeserializerProvider(new StdDeserializerProvider(new CustomJacksonBeanDeserializerFactory()))).

Voilà. Le ObjectMapper créé utilisera votre nouveau schéma de nommage lors de la sérialisation ou désérialisation JSON.

Autres conseils

Voir http://www.cowtowncoder.com/blog/archives /2011/03/entry_448.html Si vous pouvez attendre 1.8, il sera inclus ici.

Pour ce que ça vaut la peine, il y a un problème Jira pour soutenir les stratégies connectables; le vote car il pourrait aider à convaincre les développeurs d'ajouter le support. Comme je l'ai mentionné dans le commentaire, il est possible de passer outre le comportement interne, mais il est pas une chose simple à faire.

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