Mr.*_*dar 3 java json jackson spring-boot
在具有 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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用它Pojo.getPinValue()来获取准确的值。
尝试以下示例。
\n\npublic class Card {\n public int id;\n public String pin;\n}\n\npublic class CardSerializer extends StdSerializer<Card> {\n\n public CardSerializer() {\n this(null);\n }\n\n public CardSerializer(Class<Card> t) {\n super(t);\n }\n\n @Override\n public void serialize(Card value, JsonGenerator jgen, SerializerProvider provider) \n throws IOException, JsonProcessingException {\n jgen.writeStartObject();\n jgen.writeNumberField("id", value.id);\n jgen.writeStringField("pin", "****");\n jgen.writeEndObject();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n然后你需要注册你的客户序列化器ObjectMapper
Card card = new Card(1, "12345");\nObjectMapper mapper = new ObjectMapper();\n\xc2\xa0\nSimpleModule module = new SimpleModule();\nmodule.addSerializer(Card.class, new CardSerializer());\nmapper.registerModule(module);\nString serialized = mapper.writeValueAsString(card);\nRun Code Online (Sandbox Code Playgroud)\n\n您可以在此处进行一些改进,例如直接在类上注册序列化器,但您可以在此处阅读更多相关信息第 4 节 - http://www.baeldung.com/jackson-custom-serialization
\n| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |