2016-12-08 51 views
0

在具有AngularJS前端的Spring Boot應用程序中,「Pin」字段值必須在序列化時變黑,即如果POJO中的Pin字段值爲null,則相應的JSON字段具有保持空白;如果字段值包含數據,則必須用「***」字符串替換。Jackson - 序列化時變換字段值

傑克遜是否提供了一項功能來完成這項工作?

+1

您需要客戶序列化程序才能查看此處 - http://www.baeldung.com/jackson-custom-serialization –

回答

2

你可以這樣做很容易像下面沒有任何自定義序列

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; 
    } 

} 

您可以使用Pojo.getPinValue()得到確切的價值。

+1

雖然Anton Belev發佈的方法會更清晰架構,我更喜歡這一個,因爲它是一個快速和小型的解決方案:-) –

2

請嘗試以下示例。

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(); 
    } 
} 

然後,你需要用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); 

也有一些改進,你可以在這裏做的一樣直接在類註冊串行註冊客戶序列化,但你可以在這裏閱讀更多關於它第4部分 - http://www.baeldung.com/jackson-custom-serialization

+1

這是做到這一點的正確方法。 – shazin

相關問題