62 Stimmen

Kann Jackson so konfiguriert werden, dass er führende und abschließende Leerzeichen aus allen String-Eigenschaften entfernt?

Beispiel JSON (beachten Sie, dass die Zeichenfolge Leerzeichen am Ende enthält):

{ "aNumber": 0, "aString": "string   " }

Im Idealfall hat die deserialisierte Instanz eine aString Eigenschaft mit einem Wert von "string" (d.h. ohne nachfolgende Leerzeichen). Dies scheint etwas zu sein, das wahrscheinlich unterstützt wird, aber ich kann es nicht finden (z. B. in DeserializationConfig.Feature ).

Wir verwenden Spring MVC 3.x, so dass eine Spring-basierte Lösung auch in Ordnung wäre.

Ich habe versucht, Spring's WebDataBinder zu konfigurieren, basierend auf einem Vorschlag in einem Forumsbeitrag aber es scheint nicht zu funktionieren, wenn ein Jackson Message Converter verwendet wird:

@InitBinder
public void initBinder( WebDataBinder binder )
{
    binder.registerCustomEditor( String.class, new StringTrimmerEditor( " \t\r\n\f", true ) );
}

7voto

adarshr Punkte 59219

Für Spring Boot müssen wir nur einen benutzerdefinierten Deserialisierer erstellen als im Handbuch dokumentiert .

Der folgende Code ist mein Groovy-Code, aber Sie können ihn gerne für Java anpassen.

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonDeserializer
import org.springframework.boot.jackson.JsonComponent

import static com.fasterxml.jackson.core.JsonToken.VALUE_STRING

@JsonComponent
class TrimmingJsonDeserializer extends JsonDeserializer<String> {

    @Override
    String deserialize(JsonParser parser, DeserializationContext context) {
        parser.hasToken(VALUE_STRING) ? parser.text?.trim() : null
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X