Jackson JSON-Objekt Ändern, Bevor die Serialisierung

Ich bin auf der Suche um ein Objekt zu verändern, bevor es richtig wird serialisiert. Ich möchten, schreiben Sie eine benutzerdefinierte serializer zu analysieren das Objekt, dann übergeben Sie es an den Standard-Objekt-Serialisierung.

Dies ist, was ich habe:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;

/**
 *
 * @author Me
 */
public class PersonSerializer extends JsonSerializer<Person>{

    @Override
    public void serialize(Person value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {

        //This returns a modified clone of Person value.
        Person safePerson = PrivacyService.getSafePerson(value);

        provider.defaultSerializeValue(safePerson, jgen);

    }

}

Aber das geht nur in einem infinate Schleife. Ich habe auch versucht:

provider.findTypedValueSerializer(Person.class, true, null).serialize(safePerson, jgen, provider);

Funktioniert, aber es funktioniert nicht Parsen der Felder im Objekt.

Ich auch versucht, mit einer @JsonFilter aber es war sehr schwer und versechsfachte meine Last mal.

Hilfe! Danke!

  • Warum würden Sie dies tun, möchten Sie etwas zu verstecken in der Person-Objekt, bevor Sie senden es zurück an den client?
  • Ja, ich habe einen Dienst, der reinigt sich das Person-Objekt und gibt die gereinigte Klon von ihm. Die Sache ist die, dass sich je nach dem warum Sie sind angemeldet als bestimmt, wie viele Daten entfernt.
  • Es gibt auch Fälle, wo ich bin serialisiert ein array mit zwei verschiedenen Menschen innerhalb des Arrays, und ich entfernen müssen verschiedene Dinge von jedem.
  • Jackson Ansichten und Ansichten, die bestimmt sind, zu lösen diese Art von problem. wiki.fasterxml.com/JacksonJsonViews
  • Große finden! Von was ich sehen kann obwohl, das würde bedeuten ich müsste kommentieren jedes Feld in dieser Klasse (und es gibt 40+) und dann zu verwalten, jeder. Das wäre ein wenig chaotisch, was ich Suche zu tun.
Schreibe einen Kommentar