Printemps configurer @ResponseBody format JSON
Imaginer, j'ai cette méthode annotée dans un Printemps 3 @Contrôleur
@RequestMapping("")
public @ResponseBody MyObject index(@RequestBody OtherObject obj) {
MyObject result = ...;
return result;
}
Mais j'ai besoin de configurer la sortie au format json, comme si je faisais:
ObjectMapper om = new ObjectMapper();
om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);
om.getSerializationConfig()
.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT);
om.getSerializationConfig()
.set(SerializationConfig.Feature.INDENT_OUTPUT, false);
Est-il un moyen de configurer ce comportement?
J'ai trouvé un couple de questions connexes, mais je ne suis pas sûr de savoir comment les adapter à mon cas précis:
- printemps prefixjson avec responsebody
- Qui définit le contenu de la réponse-type de Spring MVC (@ResponseBody)
Merci !
Vous devez vous connecter pour publier un commentaire.
Pour les gens qui sont à l'aide de basé sur Java configuration Spring:
Je suis en utilisant
MappingJackson2HttpMessageConverter
- qui est de fasterxml.Si vous souhaitez utiliser codehaus-jackson mappeur, au lieu d'utiliser ce un
MappingJacksonHttpMessageConverter
Je needeed de résoudre très similaires problème, qui est la configuration de Jackson Mapper pour "Ne pas sérialiser les valeurs null pour l'amour du Christ!!!".
Je ne voulais pas laisser de fantaisie mvc:annotation-driven tag, alors j'ai trouvé comment configurer Jackson ObjectMapper sans enlever mvc:annotation-driven et en ajoutant a pas vraiment de fantaisie ContentNegotiatingViewResolver.
La belle chose, c'est que vous n'avez pas à écrire tout le code Java vous-même!
Et voici la configuration XML (ne pas confondre avec différents espaces de Jackson classes, j'ai simplement utilisé de nouvelles Jakson 2.x la bibliothèque ... de même il devrait également travailler avec Jackson 1.bibliothèques x):
Jackson2ObjectMapperFactoryBean
comme indiqué par @Tody.Lu et il suffit de régler leserializationInclusion
propriétéNON_NULL
AngerClown fait moi la bonne direction.
C'est ce que j'ai finalement fait, juste au cas où quelqu'un la trouver utile.
J'en ai encore pour savoir comment configurer les autres propriétés telles que:
<mvc:annotation-driven />
j'ai découvert la manière dure.AbstractHttpMessageConverter
Dans spring3.2, la nouvelle solution est introduite par: http://static.springsource.org/spring/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.html ,
voici mon exemple:
Pour le Printemps version 4.1.3+
J'ai essayé Jama de la solution, mais alors toutes les réponses ont été retournées avec Content-type 'application/json', y compris le principal, page HTML générée.
Primordial
configureMessageConverters(...)
empêche de printemps de la création de la valeur par défaut des convertisseurs. Printemps 4.1.3 permet la modification de déjà configuré convertisseurs en substituantextendMessageConverters(...)
:J'ai écrit ma propre interface factorybean qui instancie un ObjectMapper (version simplifiée):
Et l'utilisation dans la configuration spring:
Ne répond pas à la question, mais c'est le top de résultats sur google.
Si quelqu'un vient ici et veut le faire le faire pour le Printemps 4 (comme cela m'est arrivé), vous pouvez utiliser l'annotation
sur le retour de la classe.
Prendre un coup d'oeil à Rick Hightower de l'approche. Son approche permet d'éviter la configuration ObjectMapper comme un singleton et vous permet de filtrer la réponse JSON pour le même objet de différentes façons par chaque méthode de demande.
http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring
Vous pouvez configurer le ObjectMapper comme un haricot dans votre Ressort fichier xml. Ce que contient une référence à l'ObjectMapper est le
MappingJacksonJsonView
classe. Vous devez ensuite fixer la vue à un ViewResolver.Quelque chose comme cela devrait fonctionner:
Où
customObjectMapper
est défini ailleurs dans le fichier xml. Notez que vous pouvez régler directement le Printemps des valeurs de propriété avec les Enums Jackson définit; voir cette question.Aussi, ContentNegotiatingViewResolver n'est probablement pas nécessaire, c'est juste le code, je suis en utilisant dans un projet existant.
Vous pouvez effectuer les opérations suivantes(jackson version < 2):
Personnalisé mappeur de classe:
Printemps config:
Oui mais qu'advient-il si vous commencez à utiliser mixin par exemple, vous ne pouvez pas avoir de la ObjectMapper comme un singleton parce que vous serez l'application de la configuration à l'échelle mondiale. Vous serez donc en l'ajout ou la mise à l'mixin classes sur le même ObjectMapper exemple?