在具有AngularJS前端的Spring Boot應用程序中,「Pin」字段值必須在序列化時變黑,即如果POJO中的Pin字段值爲null,則相應的JSON字段具有保持空白;如果字段值包含數據,則必須用「***」字符串替換。Jackson - 序列化時變換字段值
傑克遜是否提供了一項功能來完成這項工作?
在具有AngularJS前端的Spring Boot應用程序中,「Pin」字段值必須在序列化時變黑,即如果POJO中的Pin字段值爲null,則相應的JSON字段具有保持空白;如果字段值包含數據,則必須用「***」字符串替換。Jackson - 序列化時變換字段值
傑克遜是否提供了一項功能來完成這項工作?
你可以這樣做很容易像下面沒有任何自定義序列
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()
得到確切的價值。
雖然Anton Belev發佈的方法會更清晰架構,我更喜歡這一個,因爲它是一個快速和小型的解決方案:-) –
請嘗試以下示例。
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
這是做到這一點的正確方法。 – shazin
您需要客戶序列化程序才能查看此處 - http://www.baeldung.com/jackson-custom-serialization –