Kann Jackson so konfiguriert werden, dass er führende / nachfolgende Leerzeichen aus allen String-Eigenschaften trimmt?
Beispiel JSON (beachten Sie, dass der string Leerzeichen):
{ "aNumber": 0, "aString": "string " }
Ideal, die deserialised Instanz hätte eine aString Eigenschaft mit einem Wert von "string" (also ohne Leerzeichen). Dies scheint wie etwas, das wird wohl unterstützt, aber ich kann es nicht finden (z.B. in DeserializationConfig.Feature).
Wir sind mit Spring MVC 3.x so eine Feder-basierte Lösung wäre auch in Ordnung.
Habe ich versucht die Konfiguration von Spring WebDataBinder basiert auf einem Vorschlag in einem forum-post aber es scheint nicht zu funktionieren, wenn mit einem Jackson message converter:
@InitBinder
public void initBinder( WebDataBinder binder )
{
binder.registerCustomEditor( String.class, new StringTrimmerEditor( " \t\r\n\f", true ) );
}
InformationsquelleAutor der Frage penfold | 2011-07-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit einem benutzerdefinierte deserializerkönnen Sie das folgende tun:
Diese Lösung bedeutet, dass die bean-Attribut wird immer serialisiert werden, diese Weise, und Sie müssen kommentieren jedes Attribut, das Sie wollen deserialisiert werden auf diese Weise.
InformationsquelleAutor der Antwort DCKing
Einfache Lösung für die Spring-Boot-Benutzer, nur hinzufügen, dass walv ist SimpleModule Erweiterung zu Ihrer Anwendung Kontext:
http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the-jackson-objectmapper
wenn Sie nicht mit spring boot, müssen Sie Sie registrieren die StringTrimModule sich selbst (Sie brauchen nicht zu kommentieren mit @Component)
InformationsquelleAutor der Antwort Maciej Marczuk
Das problem der annotation @JsonDeserialize ist, dass Sie müssen immer daran denken, es zu setzen on der setter.
Um es Global zu "einmal und für immer" mit Spring MVC, habe ich die nächsten Schritte:
pom.xml:
Erstellen von benutzerdefinierten ObjectMapper:
Update Spring servlet-context.xml:
InformationsquelleAutor der Antwort walv
Für Spring Boot, wir müssen einfach erstellen Sie eine benutzerdefinierte deserializer als im Handbuch dokumentiert.
Das folgende ist meine Groovy-code, aber fühlen Sie sich frei, um eine Anpassung an die Arbeit in Java.
InformationsquelleAutor der Antwort adarshr