Peut Jackson être configuré pour la garniture avant/après les espaces de toutes les propriétés de la chaîne?
Exemple JSON (notez que la chaîne des espaces):
{ "aNumber": 0, "aString": "string " }
Idéalement, le deserialised instance aurait un aString propriété avec une valeur de "chaîne" (c'est à dire sans les espaces). Cela semble être quelque chose qui est sans doute pris en charge, mais je ne le trouve pas (par exemple dans DeserializationConfig.Fonction).
Nous sommes à l'aide de Spring MVC 3.x si un Ressort à base de solution serait aussi bien.
J'ai essayé la configuration du Printemps WebDataBinder basée sur la suggestion dans un post sur le forum mais il ne semble pas fonctionner lors de l'utilisation d'un Jackson message converter:
@InitBinder
public void initBinder( WebDataBinder binder )
{
binder.registerCustomEditor( String.class, new StringTrimmerEditor( " \t\r\n\f", true ) );
}
- Êtes-vous sûr à 100%, les espaces ne sont pas à la valeur réelle? Parce que je n'ai jamais vu Jackson ce faire. Ou dites-vous que la classe que vous passez à Jackson a ces espaces intentionnellement, et vous voulez mettre en place Jackson pour le supprimer pour vous?
- Je pensais que c'était assez clairement déclaré que les données des espaces à partir de la source et il veut configurer Jackson pour supprimer les espaces à droite sur la désérialisation.
- C'est exact, nous n'avons aucune raison valable de garder de fuite (ou à la tête) les espaces présents dans l'arrivée d'un message JSON.
Vous devez vous connecter pour publier un commentaire.
Avec un personnalisé deserializer, vous pouvez effectuer les opérations suivantes:
Cette solution implique que ce bean attribut sera toujours sérialisé de cette façon, et vous aurez à annoter chaque attribut que vous souhaitez être désérialisé de cette façon.
asText()
est de me donner un "impossible de trouver le symbole d'erreur". Tout le reste résolu à jackson.de base, tout simplement pas cette méthode. Aussi, le lien que vous avez posté pour "custom deserializer" est cassé.Solution facile pour le Printemps de Démarrage des utilisateurs, il suffit d'ajouter que walv de SimpleModule extension à votre contexte d'application:
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
si vous êtes pas à l'aide de spring boot, vous devez vous inscrire à la StringTrimModule vous-même (vous n'avez pas besoin de les annoter avec @Component)
Le problème de l'annotation @JsonDeserialize est que vous devez toujours vous rappeler de le mettre sur le setter.
Pour le faire à l'échelle mondiale "une fois et pour toujours" avec Spring MVC, je n'ai prochaines étapes:
pom.xml:
Créer des ObjectMapper:
Mise à jour du Printemps servlet-context.xml:
String.trim()
pour les valeurs non null à la place des Communes StringUtils.)Pour le Printemps Démarrage, il suffit de créer un personnalisé deserializer comme documenté dans le manuel.
Voici mon code Groovy mais n'hésitez pas à l'adapter pour travailler en Java.
com.fasterxml.jackson.format
pom.xml
CsvUtil.java