2016-12-08 2 views
0

In einer Spring Boot-Anwendung mit AngularJS-Frontend muss ein "Pin" -Feldwert bei der Serialisierung geschwärzt werden, dh wenn der Pin-Feldwert im POJO Null ist, hat das entsprechende JSON-Feld leer bleiben; Wenn der Feldwert Daten enthält, muss er durch eine "***" Zeichenfolge ersetzt werden.Jackson - Feldwert bei Serialisierung transformieren

Bietet Jackson eine Funktion, um dies zu erreichen?

+1

Sie benötigen Kunden Serializer für die hier schauen - http://www.baeldung.com/jackson-custom-serialization –

Antwort

2

Sie können es leicht wie folgt ohne kundenspezifische Serializer

public class Pojo { 
    @JsonIgnore 
    private String pin; 

    @JsonProperty("pin") 
    public String getPin() { 
     if(pin == null) { 
      return ""; 
     } else { 
      return "***"; 
     } 
    } 

    @JsonProperty("pin") 
    public void setPin(String pin) { 
     this.pin = pin; 
    } 

    @JsonIgnore 
    public String getPinValue() { 
     return pin; 
    } 

} 

Sie Pojo.getPinValue() verwenden können, den genauen Wert zu erhalten.

+1

Während der Ansatz von Anton Belev gepostet wäre ein sauberer bezüglich Architektur, bevorzuge ich diese, da es eine schnelle und kleine Lösung ist :-) –

2

Versuchen Sie das folgende Beispiel.

public class Card { 
    public int id; 
    public String pin; 
} 

public class CardSerializer extends StdSerializer<Card> { 

    public CardSerializer() { 
     this(null); 
    } 

    public CardSerializer(Class<Card> t) { 
     super(t); 
    } 

    @Override 
    public void serialize(Card value, JsonGenerator jgen, SerializerProvider provider) 
     throws IOException, JsonProcessingException { 
     jgen.writeStartObject(); 
     jgen.writeNumberField("id", value.id); 
     jgen.writeStringField("pin", "****"); 
     jgen.writeEndObject(); 
    } 
} 

Dann müssen Sie Ihren Kunden Serializer mit dem ObjectMapper

Card card = new Card(1, "12345"); 
ObjectMapper mapper = new ObjectMapper(); 
  
SimpleModule module = new SimpleModule(); 
module.addSerializer(Card.class, new CardSerializer()); 
mapper.registerModule(module); 
String serialized = mapper.writeValueAsString(card); 

Es gibt einige Verbesserungen, die Sie hier wie die Registrierung der Serializer tun können, auf die Klasse direkt registrieren, aber Sie können mehr darüber lesen Sie hier Abschnitt 4 - http://www.baeldung.com/jackson-custom-serialization

+1

Dies ist der richtige Weg, es zu tun. – shazin

Verwandte Themen